小黑实习最后一周,穿上正装假装成长,去医院面试后和尚香疯狂的leetcode之旅:576. 出界的路径数

记忆化搜索

class Solution:
    def findPaths(self, m: int, n: int, maxMove: int, startRow: int, startColumn: int) -> int:
        cache = [[[0] * (maxMove+1) for _ in range(n)] for _ in range(m)]
        def dfs(moveCount, i, j):
            # 判定是否出界
            if i >= m or i < 0 or j >= n or j < 0:
                return 1
            # 判断步数是否用完
            if not moveCount:
                return 0
            # 判断该点是否无法移动出去,剪枝
            if i + moveCount < m and i - moveCount >= 0 and j + moveCount < n and  j - moveCount >= 0:
                return 0 

            if cache[i][j][moveCount]:
                return cache[i][j][moveCount]
            sum_ = 0

            for move in [(-1, 0), (1, 0), (0, 1), (0, -1)]:
                sum_ = int((sum_ + dfs(moveCount-1, i + move[0], j + move[1])) % (1e9 + 7))
            cache[i][j][moveCount] = sum_
            return cache[i][j][moveCount]
        p = dfs(maxMove, startRow, startColumn)
        return p

在这里插入图片描述

动态规划

class Solution:
    def findPaths(self, m: int, n: int, maxMove: int, startRow: int, startColumn: int) -> int:
        # 动态规划矩阵维度:[maxMove, m, n]
        dp = [[[0] * n for _ in range(m)] for _ in range(maxMove+1)]
        # 探测的邻居相对坐标
        neigbers = [(0, -1), (0, 1), (1, 0), (-1, 0)]
        # 开始动态规划推导
        for k in range(1, maxMove+1):
            for i in range(m):
                for j in range(n):
                    # 往边界走
                    if i == 0:
                        dp[k][i][j] += 1
                    if j == 0:
                        dp[k][i][j] += 1
                    if i == m - 1:
                        dp[k][i][j] += 1
                    if j == n - 1:
                        dp[k][i][j] += 1
                    # 进行动态规划计算
                    for nei in neigbers:
                        if 0 <= nei[0] + i < m and 0 <= nei[1] + j < n:
                            dp[k][i][j] = (dp[k][i][j] + dp[k-1][nei[0] + i ][nei[1] + j]) % (1e9 + 7)
                            
        return int(dp[maxMove][startRow][startColumn])

在这里插入图片描述

动态规划内存优化

class Solution:
    def findPaths(self, m: int, n: int, maxMove: int, startRow: int, startColumn: int) -> int:
        # 初始化动态规划数组 m * n
        dp = [[0] * n for _ in range(m)]
        # 开始动态规划计算
        for k in range(1, maxMove+1):
            temp = [[0] * n for _ in range(m)]
            moves = [(1, 0), (-1, 0), (0, 1), (0, -1)]
            for i in range(m):
                for j in range(n):
                    # 边界
                    if i == 0:
                        temp[i][j] += 1
                    if j == 0:
                        temp[i][j] += 1
                    if i == m - 1:
                        temp[i][j] += 1
                    if j == n - 1:
                        temp[i][j] += 1
                    # 汇集周围
                    for move in moves:
                        if 0 <= move[0] + i < m and 0 <= move[1] + j < n:
                            temp[i][j] = int((temp[i][j] + dp[move[0] + i][move[1] + j]) % (1e9 + 7))
            dp = temp
            temp = [[0] * n for _ in range(m)]
        return dp[startRow][startColumn]      

在这里插入图片描述

小黑生活

小汤2第29课打卡

在这里插入图片描述

开始日常十公里跑步

在这里插入图片描述

第二天准备要去面试了

在这里插入图片描述

准备工作做好

在这里插入图片描述

小黑穿上西装假装成长,看起来确实成熟不少

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

上午咖啡甜点论文

在这里插入图片描述

准备出发

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

考完和尚香去前门咖啡厅浪啦

在这里插入图片描述

在这里插入图片描述

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

调酒算法

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

晚上和尚香的疯狂星期四&&喜茶

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

晚上继续10km

在这里插入图片描述

活力早餐

在这里插入图片描述

最后一天实习,平板支撑突破十分钟

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

咖啡算法

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值