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]