小黑今天下午准备面试,开启边实习边写论文边继续准备笔试和面试的leetcode之旅:509. 斐波那契数&&剑指 Offer II 103. 最少的硬币数目

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

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

午餐

在这里插入图片描述
在这里插入图片描述

又收到了反馈,继续肝!

在这里插入图片描述

咖啡算法

在这里插入图片描述

继续工作!!!!working

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值