leetcode 62-所有可行的路径数
2017-05-07 18:48
148 查看
最开始想的是回溯遍历,感觉是一个深度优先搜索的题目,结果自己没整明白应该如何回溯。所以看了别人的思路。
不考虑DP:
放在高中来做,是一道简单的排列组合的问题。
横着需要走n-1步,竖着需要走m-1步。一共需要走m+n-2步,结果就是
或者
。
就是m+n-2步中找出m-1来竖着走,剩下的横着走。
这里涉及到计算阶乘,12的阶乘约4亿多,13的阶乘约62亿多,题目m和n最大是100,所以这里计算阶乘需要使用大数类。
代码:
但是leetcode里面给出的标签是DP。所以再用DP来做。
思路:每个格子的值等于其上面一个和左面一个的和。这里还需要一张配图和详细的描述。还需要编辑。
代码:
不考虑DP:
放在高中来做,是一道简单的排列组合的问题。
横着需要走n-1步,竖着需要走m-1步。一共需要走m+n-2步,结果就是
或者
。
就是m+n-2步中找出m-1来竖着走,剩下的横着走。
这里涉及到计算阶乘,12的阶乘约4亿多,13的阶乘约62亿多,题目m和n最大是100,所以这里计算阶乘需要使用大数类。
代码:
public int uniquePaths(int m, int n) { return factorial(m + n - 2).divide(factorial(m - 1).multiply(factorial(n - 1))).intValue(); } private BigInteger factorial(int x) { BigInteger bi = new BigInteger("1"); for (int i = 1; i <= x; i++) { bi = bi.multiply(BigInteger.valueOf(i)); } return bi; }
但是leetcode里面给出的标签是DP。所以再用DP来做。
思路:每个格子的值等于其上面一个和左面一个的和。这里还需要一张配图和详细的描述。还需要编辑。
代码:
public int uniquePaths(int m, int n) { int[][] path = new int[m] ; for (int i = 0; i < n; i++) path[0][i] = 1; for (int i = 0; i < m; i++) path[i][0] = 1; for (int i = 1; i < n; i++) { for (int j = 1; j < m; j++) { path[j][i] = path[j - 1][i] + path[j][i - 1]; } } return path[m - 1][n - 1]; }
相关文章推荐
- leetcode Sum Root to Leaf Numbers(所有路径之和)
- LeetCode---- 二叉树中,找出和为某值的所有路径
- 改进的走迷宫,可算出所有可行的路径
- [LeetCode] All Paths From Source to Target 从起点到目标点到所有路径
- LeetCode | Sum Root to Leaf Numbers(所有根结点到叶节点路径和的和)
- LeetCode 62. Unique Paths(所有不同的路径)
- 【Leetcode】Binary Tree Paths 二叉树根结点到所有叶子结点的路径
- 每天一道LeetCode-----计算从二维数组的左上角到达右下角的所有路径数及最短的那条,如果存在障碍物时又是多少
- leetcode Sum Root to Leaf Numbers(所有路径之和)
- [Leetcode]113. Path Sum II 求路径和一个数的所有路径
- LeetCode 63. Unique Path II(所有不同路径之二)
- [leetcode 62]Unique Paths---机器人向左或向下走到右下角的路径数目
- 【LeetCode】二叉树的所有路径 - Easy(FB,Google)
- leetcode Sum Root to Leaf Numbers 二叉树所有叶节点的路径和
- [LeetCode]62 不同的路径总数
- 每天一道LeetCode-----找到二叉树所有和为给定值的路径
- 每天一道LeetCode-----以字符串的形式输出二叉树所有从根节点到叶子节点的路径
- [LeetCode]113. Path Sum II(列出二叉树根到叶路径和等于sum的所有路径)
- Java路径问题最终解决方案—可定位所有资源的相对路径寻址
- 获取指定路径下文件夹所有文件的大小