代码随想录算法训练营第四十五天 | leetcode 70. 爬楼梯,322. 零钱兑换,279.完全平方数

代码随想录算法训练营第四十五天 | leetcode 70. 爬楼梯,322. 零钱兑换,279.完全平方数

  • 70. 爬楼梯
  • 322. 零钱兑换
  • 279.完全平方数

70. 爬楼梯

题目:
假设你正在爬楼梯。需要 n 阶你才能到达楼顶。
每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?
注意:给定 n 是一个正整数。

题目链接:70. 爬楼梯

class Solution:
    def climbStairs(self, n: int) -> int:
        # dp = [0] * (n+1)
        # dp[0] = 1
        # dp[1] = 1
        # for i in range(2, n+1):
        #     dp[i] = dp[i-1] + dp[i-2]
        # return dp[n]
        dp = [0] * (n+1)
        dp[0] = 1
        m = 2
        for j in range(n+1):
            for step in range(1, m+1):
                if j>= step:
                    dp[j] += dp[j - step]
        return  dp[n]

322. 零钱兑换

题目:
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。
你可以认为每种硬币的数量是无限的。

题目链接:322. 零钱兑换

class Solution:
    def coinChange(self, coins: List[int], amount: int) -> int:
        dp = [float("INF")] * (amount + 1)
        dp[0] = 0
        for coin in coins:
            for j in range(coin, amount + 1):
                dp[j] = min(dp[j], dp[j - coin] + 1)
        return dp[amount] if dp[amount] != float("INF") else -1

279.完全平方数

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

题目链接:279. 完全平方数

class Solution:
    def numSquares(self, n: int) -> int:
        nums = [i**2 for i in range(1, n + 1) if i**2 <= n]
        dp = [10 ** 4] * (n+1)
        dp[0] = 0
        for j in range(1, n+1):
            for num in nums:
                if j >= num:
                    dp[j] = min(dp[j], dp[j - num] + 1)

        return dp[n]

你可能感兴趣的:(代码随想录算法训练营,算法,leetcode,动态规划)