小黑今天下午准备面试,开启边实习边写论文边继续准备笔试和面试的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]

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

小黑代码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]

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

动态规划

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

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

剑指 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)

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

小黑代码:动态规划

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

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

小黑生活

吉野家辣白菜鸡晚餐

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

晚间练琴40min

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

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

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

午餐

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

又收到了反馈,继续肝!

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

咖啡算法

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

继续工作!!!!working

你可能感兴趣的:(小黑的日常leetcode之旅,leetcode,面试,算法)