Leetcode-D13-62. 不同路径&63. 不同路径 II

62. 不同路径

1、不知道哪里错了,去调试一下~

    def uniquePaths(self, m: int, n: int) -> int:
        old_row = [i for i in range(1,n)]
        new_row = [0]*(n-1)
        for i in range(1,m):
            left =i
            for j in range(n-1):
                new_row[j]= left + old_row[j]+2
                left = new_row[j]
            # 赋值,而不是改变指针
            old_row = new_row[:]
             
        return new_row[-1]

2、原来是递归方程写错了!从左面还有从上面过来都不会增加原来的种类,新的路径种类就是从左的种类数+从上的种类数【之前好像这样错过】。
3、不要忘了n=1 or m=1的特殊情况

class Solution:
    def uniquePaths(self, m: int, n: int) -> int:
        if n==1 or m==1:
            return 1
        old_row = [1]*(n-1)
        new_row = [0]*(n-1)
        for i in range(1,m):
            left =1
            for j in range(n-1):
                new_row[j]= left + old_row[j]
                left = new_row[j]
            # 赋值,而不是改变指针
            old_row = new_row[:]
             
        return new_row[-1]

4、没有用二维矩阵记录所有数值,而是只记录左侧和上一行、本行的数据,减少了内存空间的使用。
在这里插入图片描述

63. 不同路径 II

1、在62的基础上进行改进。不过第一次写的时候忘记判断该位置是否为1了,如果为1,就代表着此路不通,经过这个点到达其下或者右的方法为0,因为此路不通。
2、

class Solution:
    def uniquePathsWithObstacles(self, obstacleGrid: List[List[int]]) -> int:
        m = len(obstacleGrid)
        n = len(obstacleGrid[0])
        if n==1:
            if (1 in [ i[0] for i in obstacleGrid]) :
                return 0 
            else:
                return 1
        if m==1:
            if 1 in obstacleGrid[0]:
                return 0
            else:
                return 1
        # 初始化第一行
        if 1 in obstacleGrid[0]:
            index_row = obstacleGrid[0].index(1)
            old_row = [1]*(index_row-1) + [0]*(n-index_row)
        else:
            old_row = [1]*(n-1)

        new_row = [0]*(n-1)
        # 初始化left列表
        left_row = [i[0] for i in obstacleGrid]
        if 1 in left_row:
            index_left = left_row.index(1)
            left = [1]*(index_left-1)+[0]*(m-index_left)
        else:
            left = [1]*(m-1)

        for i in range(1,m):
            left_val = left[i-1]
            for j in range(n-1):
                if obstacleGrid[i][j+1]==1:
                    new_row[j]=0
                else:
                    new_row[j]= left_val + old_row[j]
                left_val = new_row[j]
            # 赋值,而不是改变指针
            old_row = new_row[:]
             
        return new_row[-1]

3、
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值