题目描述:
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。
问总共有多少条不同的路径?
题目链接: LeetCode-62-不同路径
解题思路:详见注释~
代码实现:
class Solution {public int uniquePaths(int m, int n) {// 1. dp[i][j]含义:走到(i,j)位置有dp[i][j]条路径// 2. 递推公式:dp[i][j]依赖与 dp[i-1][j] 和 dp[i][j-1]的路径个数// dp[i][j] = dp[i-1][j] + dp[i][j-1]// 3. 如何初始化:第一行和第一列均初始化为 1,不管怎么走都只有一种方法,要么一直向右,要么一直向下// dp[0][j]=1// dp[i][0]=1// 4. 遍历顺序:从左上到右下// 定义一个二维的dp数组int[][] dp = new int[m][n];for (int i = 0; i < m; i++) {dp[i][0]=1;}for (int i = 0; i < n; i++) {dp[0][i]=1;}for (int i = 1; i < m; i++) {for (int j = 1; j < n; j++) {dp[i][j]=dp[i-1][j] + dp[i][j-1];}}return dp[m-1][n-1];}
}