LeetCode-062-不同路径
不同路径
题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。解法一:递归法
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
【LeetCode-062-不同路径】示例说明请见LeetCode官网。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/probl...
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
首先,经过分析可知,到达任意一个单元格子的最后一步,可以从这个格子的左边过来,也可以从这个格子的上边过来,所以到达任意一个格子的步数是到它左边的步数加上到它上面格子的步数之和,所以可以用递归的方法求解,具体过程如下:解法二:迭代法
- 如果m等于1或者n等于1,直接返回1;
- 如果上面的条件不满足,则递归调用该方法求解
uniquePaths(m - 1, n) + uniquePaths(m, n - 1)
。
首先记录第一行的格子的数字都是1,然后由于第一列的值都是1,而下面的每一行的
1 ~ n-1
列的值都可以根据当前行的左边的格子和上一行的上面的格子的值相加所得,所以通过迭代得到每一行的值,最后返回最后一行的最后一个值即为最终结果。
public class LeetCode_062 {
/**
* 递归
*
* @param m
* @param n
* @return
*/
public static int uniquePaths(int m, int n) {
if (m == 1 || n == 1) {
return 1;
}
return uniquePaths(m - 1, n) + uniquePaths(m, n - 1);
}/**
* 迭代
*
* @param m
* @param n
* @return
*/
public static int uniquePaths1(int m, int n) {
if (m == 1 || n == 1) {
return 1;
}
int[] row = new int[n];
for (int i = 0;
i < n;
i++) {
row[i] = 1;
}
for (int i = 2;
i <= m;
i++) {
for (int x = 1;
x < row.length;
x++) {
row[x] = row[x - 1] + row[x];
}
}
return row[n - 1];
}public static void main(String[] args) {
System.out.println(uniquePaths(51, 9));
System.out.println(uniquePaths1(51, 9));
}
}
【每日寄语】 给自己信心,没有人可以帮你,不钻牛角尖,自然就海阔天空!
推荐阅读
- 别墅庭院设计,不同的别墅庭院设计也给人视觉上完全不一样的!
- 2018,不同寻常
- 蓝桥杯试题
- 名校和普校到底有什么不同()
- 二叉树路径节点关键值和等于目标值(LeetCode--112&LeetCode--113)
- 不同寻常的书呆子
- 我们每个人都是不同的,你敢这样吗()
- 普通人通往大神的3个创作路径
- 《三十而已》许幻山和《逆流而上的你》杨光——都是女强男弱,为何走向全然不同
- 如果勇敢一点,也许结局会有不同