62. 不同路径
2019-05-14 16:39
465 查看
解1 递归
dfs深度优先遍历
但超出时间限制
class Solution: def uniquePaths(self, m: int, n: int) -> int: result = list() self.dfs(m - 1, n - 1, result) return sum(result) def dfs(self, m, n, result): if m == 0 or n == 0: result.append(1) else: self.dfs(m - 1, n, result) self.dfs(m, n - 1, result)
解2 找规律
分析:
机器人必须向右走 m - 1步,向左走 n - 1步,总共走 m - n - 2步
则在 m - n - 2步中选 m - 1步向右走(排列组合)
class Solution: def uniquePaths(self, m: int, n: int) -> int: # 向右走的步数 r = m - 1 # 向左走的步数 l = n - 1 # 总共走的步数 s = r + l # s步中选r步向右走 或 选l步向左走 a = 1 b = 1 if r < l: for i in range(r): a *= s b *= r s -= 1 r -= 1 return int(a / b) else: for i in range(l): a *= s b *= l s -= 1 l -= 1 return int(a / b)
解3 动态规划
path[i][j] 表示从左上角到达 i j 方格总共有多少条路径,则
- path[0][j] == path[i][0] == 1 上边和左边都只有一条路径
- path[i][j] = path[i - 1][j] + path[i][j - 1] 到达上边方格的路径数 + 到达左边方格的路径数
class Solution: def uniquePaths(self, m: int, n: int) -> int: path = [[1 for i in range(n)] for j in range(m)] for i in range(1, m): for j in range(1, n): path[i][j] = path[i - 1][j] + path[i][j - 1] return path[m - 1][n - 1]
相关文章推荐
- 62. 不同路径
- LeetCode 62.不同路径
- LeetCode62/63. 不同路径问题(python)
- Leet Code 62 Unique Paths - 不同路径 - Java
- leetcode 62.不同路径
- [LeetCode]62 不同的路径总数
- leetcode62.不同路径
- LeetCode62-不同路径
- rac 归档的存放路径下的不同的恢复方法
- Oracle 11g RAC开启归档,闪回并设置各自不同的路径
- Spring 通过访问路径返回不同的数据格式(参考资料如下)
- JavaWeb项目在不同容器中正确获取项目路径
- web service开发时的当前路径和部署到tomcat上的web service当前路径的不同
- Opencv路径的统一修改以及不同版本路径的转换
- [matlab]--调用不同路径下函数的方法(类似c++#include(xxx))
- 第六课 自己实现路由改进,针对不同请求的路径进行响应
- poj 3713 Transferring Sylla 判断无向图是否每两个点之间都能至少有3点不同的路径可达 是否3-连通
- php在不同平台下路径分隔符不同的解决办法
- mkdir()与 mkdirs()方法的区别 ;目录和文件的区别;绝对路径和相对路径的详解;file的getPath getAbsolutePath和getCanonicalPath的不同
- Java在不同环境下获取当前路径的方法--this.getClass().getResource("")