您的位置:首页 > 其它

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,所以这里计算阶乘需要使用大数类。

代码:

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