描述
有一个机器人的位于一个 m × n 个网格左上角。
机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。
问有多少条不同的路径?
注意:n和m均不超过100,且答案保证在32位整数可表示范围内。
此题运用动态规划的思想
思路
- 定义一个二维数组dp,dp[i][j]代表从左上角到该点共有多少条路径。
- 当dp[0][j]或者dp[i][0]时,结果都为1,即路径只有一条。
- 当i,j不属于上述的情况时,dp[i][j] = dp[i-1][j](代表向下移动)+dp[i][j-1](代表向右移动)。
public class Solution {
/**
* @param m: positive integer (1 <= m <= 100)
* @param n: positive integer (1 <= n <= 100)
* @return: An integer
*/
public int uniquePaths(int m, int n) {
// write your code here
int[][] dp = new int[m][n];
dp[0][0] = 0;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
if(i==0 || j==0){
dp[i][j]=1;
}else{
dp[i][j] = dp[i-1][j] + dp[i][j-1];
}
}
}
return dp[m-1][n-1];
}
}