• 代码随想录 Day-44|#70 爬楼梯(进阶)|#322 零钱兑换|#279 完全平方数


    清单

    ● 70. 爬楼梯 (进阶)
    ● 322. 零钱兑换
    ● 279.完全平方数

    LeetCode #70 爬梯子(进阶)

    1. 题目

    假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
    每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

    2. 思路

    类似于昨天做的题目,但遍历顺序为先遍历背包(n阶台阶)再遍历物品 (1/2台阶)

    3. 代码实现

    class Solution:
        def climbStairs(self, n: int) -> int:
            dp = [0] * (n+1)
            dp[0] = 1
            m = 2
            for i in range(n+1):
                for j in range(1, m+1):
                    if i >= j:
                        dp[i] += dp[i-j]
            return dp[n]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    LeetCode #322 零钱兑换

    1. 题目

    给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。
    计算并返回可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。
    你可以认为每种硬币的数量是无限的

    2. 思路

    五部曲

    1. dp数组含义: 达到金额i所需要的最少硬币个数dp[i]
    2. 递推公式: dp[i] = min(dp [i-coins[j]] + 1, dp[i])
    3. 初始化: 递推公式中每次取最小值,为了避免全为0,dp[i] = float(‘inf’)
    4. 遍历顺序: 所求值为总金额所需最少硬币个数,正序/倒序均可

    3. 代码实现

    class Solution:
        def coinChange(self, coins: List[int], amount: int) -> int:
            dp = [float('inf')] * (amount + 1)
            dp[0] = 0
    
            for coin in coins:
                for i in range(coin,amount + 1):
                    if dp[i-coin] != float('inf'):
                        dp[i] = min(dp[i - coin] + 1,dp[i])
            
            if dp[amount] == float('inf'):
                return -1
            return dp[amount]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    LeetCode #279 完全平方数

    1. 题目

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
    给你一个整数 n ,返回和为 n 的完全平方数的最少数量。
    完全平方数是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。

    2. 思路

    1. dp数组含义: 和为n的完全平方数的最少数量
    2. 递推公式: dp[n] = min(dp[n - i*i], dp[n])
    3. 初始化: 取最小值,且dp[0] = 0, 因此dp[n] = float(‘inf’),避免全被初始值覆盖
    4. 遍历顺序: 求最少数量,正序/倒序均可

    3. 代码实现

    class Solution:
        def numSquares(self, n: int) -> int:
            dp = [float('inf')] * (n + 1)
            dp[0] = 0
    
            for i in range(1, n+1):
                for j in range(1, int(i ** 0.5) + 1):
                    dp[i] = min(dp[i - j*j] + 1,dp[i])
            
            return dp[n]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
  • 相关阅读:
    当开发人员无法解决问题时,测试人员应该如何与他们沟通?
    【JVM内存区域及创建对象的过程】
    qt_standard_project_setup
    【ZZULIOJ】1079: a+b(多实例测试2)(Java)
    创信短信API的无代码开发集成:电商平台、CRM和用户运营
    什么是NPM(Node Package Manager)?它的作用是什么?
    leetcode:2678. 老人的数目(python3解法)
    LocalDateTime、LocalDate、Date的相互转换工具类
    java开发手册-07设计规约
    文档 + 模型
  • 原文地址:https://blog.csdn.net/weixin_54191598/article/details/133231970