509. 斐波那契数
小黑代码:递归法
class Solution:
# 缓存字典
map_ = {}
map_[0] = 0
map_[1] = map_[2] = 1
def fib(self, n: int) -> int:
# 查找缓存
if self.map_.get(n) != None:
return self.map_[n]
self.map_[n] = self.fib(n-1) + self.fib(n-2)
return self.map_[n]

小黑代码1:动态规划
class Solution:
def fib(self, n: int) -> int:
# 初始化动态规划数组
dp = [0, 1, 1]
for i in range(3, n+1):
dp.append(dp[i-1] + dp[i-2])
return dp[n]

动态规划
class Solution:
def fib(self, n: int) -> int:
if n < 2:
return n
r = 0
d = 1
p = 1
for i in range(3, n+1):
r = d
d = p
p = r + d
return p

剑指 Offer II 103. 最少的硬币数目
小黑代码:递归法
class Solution:
def coinChange(self, coins: List[int], amount: int) -> int:
map_ = collections.defaultdict(int)
def dfs(money):
if money == 0:
return 0
# 缓存里存在
if map_[money] != 0:
return map_[money]
# 非法金额
if money < 0:
return -1
# 初始化最小值以及是否被更新的标记
min_ = float('inf')
flag = False
# 遍历所有的硬币金额
for coin in coins:
num = dfs(money - coin)
# 更新
if num != -1 and num < min_:
min_ = num
flag = True
# 缓存
map_[money] = min_ + 1 if flag else -1
return map_[money]
return dfs(amount)

小黑代码:动态规划
class Solution:
def coinChange(self, coins: List[int], amount: int) -> int:
# 初始化动态规划数组
dp = [0]
for i in range(1, amount+1):
dp.append(float('inf'))
for coin in coins:
# 递推
if i - coin >= 0:
dp[i] = min(dp[i - coin] + 1, dp[i])
return dp[amount] if dp[amount] != float('inf') else -1

小黑生活
吉野家辣白菜鸡晚餐



晚间练琴40min

麦当劳早饭+通勤看英语+到公司冥想练习


午餐


又收到了反馈,继续肝!

咖啡算法

文章介绍了使用递归和动态规划两种方法解决斐波那契数列问题以及寻找最少硬币组合问题。动态规划优化了递归的效率,避免了重复计算。此外,还提到了日常生活中的学习与工作安排。

被折叠的 条评论
为什么被折叠?



