欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

62. Unique Paths

程序员文章站 2022-06-04 17:38:31
...

本题为动态规划问题,共有三种解决方法:

二元数组
一元数组

数学公式

62. Unique Paths

return math.factorial(m+n-2)/math.factorial(m-1)/math.factorial(n-1)

采用二维数组

保存到达每一个位置所有可能的路径个数;

在数组中可以寻找到规律:

初始化上边和左边为全1;其他位置的元素=上面+左面;最后返回右下角的元素作为最终结果。

时间复杂度:O(n^2);空间复杂度:o(m*n)

62. Unique Paths

一元数组

由于使用二元数组的过程中,更新dp[i][j]只用到了数组中本列dp[:][j]和前一列dp[:][j-1](或者本行和前一行)的数据,所以不需要保存整个m*n数组,只需要保存这两列即可。

又因为本列就是前一列更新之后的数据,所以可以只采用一个列向量,直接对这个列向量进行更新。

时间复杂度:O(n^2);空间复杂度:o(m)或者o(n)

完整代码

class Solution(object):
    def uniquePaths(self, m, n):
        """
        :type m: int
        :type n: int
        :rtype: int     
#使用一元数组
        dp=[1 for _ in xrange(n)]
        for i in xrange(1,m):
            for j in xrange(1,n):
                dp[j]+=dp[j-1]
        return dp[-1]
        #使用二元数组        
        dp=[[1 for _ in xrange(m)]for _ in xrange(n)]
        for i in xrange(1,n):    #注意:xrange()的终止条件是到n-1时结束
            for j in xrange(1,m):
                dp[i][j]=dp[i-1][j]+dp[i][j-1]
        return dp[-1][-1]