不同的路径
不同的路径
有一个机器人的位于一个M×N个网格左上角(下图中标记为'Start')。
机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为'Finish')。
问有多少条不同的路径?
样例
1,1 | 1,2 | 1,3 | 1,4 | 1,5 | 1,6 | 1,7 |
2,1 | ||||||
3,1 | 3,7 |
以上3 x 7的网格中,有多少条不同的路径?
注意
View Code
n和m均不超过100
写了一个move 结果超时了。。
然后换成dp, 显然到达某一位置的路径数是到达它左边一个位置和上面一个位置之和。
至于一维数组可以直接返回1,这样更快一些
1 public class Solution { 2 /** 3 * @param n, m: positive integer (1 <= n ,m <= 100) 4 * @return an integer 5 */ 6 int sum = 0; 7 public int uniquePaths(int m, int n) { 8 // write your code here 9 // move(m,n,0,0); 10 // return sum; 11 int dp[] = new int[n]; 12 for(int i = 0; i < n; i++) { 13 dp[i] = 1; 14 } 15 for(int i = 1; i < m; i++) { 16 for(int j = 1; j < n; j++) { 17 dp[j] += dp[j-1]; 18 } 19 } 20 return dp[n-1]; 21 } 22 23 void move(int m, int n, int i, int j) { 24 if(i == m-1 && j == n-1) { 25 sum++; 26 }else { 27 if(i+1<m) move(m,n,i+1,j); 28 if(j+1<n) move(m,n,i,j+1); 29 } 30 } 31 }