62. Unique Paths
程序员文章站
2022-06-04 17:38:31
...
本题为动态规划问题,共有三种解决方法:
二元数组
一元数组
数学公式
return math.factorial(m+n-2)/math.factorial(m-1)/math.factorial(n-1)
采用二维数组
保存到达每一个位置所有可能的路径个数;
在数组中可以寻找到规律:
初始化上边和左边为全1;其他位置的元素=上面+左面;最后返回右下角的元素作为最终结果。
时间复杂度:O(n^2);空间复杂度:o(m*n)
一元数组
由于使用二元数组的过程中,更新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]
推荐阅读
-
MySQL索引类型Normal、Unique和Full Text的讲解
-
MySQL中KEY、PRIMARY KEY、UNIQUE KEY、INDEX 的区别
-
array_unique() - 去除数组中重复的元素值
-
mysql为字段添加和删除唯一性索引(unique) 的方法
-
荐 Java刷题笔记15:不同的二叉搜索树( Unique Binary Search Trees)
-
C# Mutex to make sure only one unique application instance started
-
php下判断数组中是否存在相同的值array_unique
-
动态链接库函数内的静态变量,奇妙的UNIQUE Bind
-
c/c++ 多线程 unique_lock的使用
-
php数组函数序列之array_unique() - 去除数组中重复的元素值