题目描述
一个机器人在m×n大小的地图的左上角(起点,下图中的标记“start"的位置)。
机器人每次向下或向右移动。机器人要到达地图的右下角。(终点,下图中的标记“Finish"的位置)。
可以有多少种不同的路径从起点走到终点?
上图是3×7大小的地图,有多少不同的路径?
备注:m和n小于等于100
开二维数组动态规划:
1 import java.util.*; 2 3 4 public class Solution { 5 /** 6 * 7 * @param m int整型 8 * @param n int整型 9 * @return int整型 10 */ 11 public int uniquePaths (int m, int n) { 12 int[][] dp=new int[m][n]; 13 for(int i=0;i<m;i++){ 14 dp[i][0]=1; 15 } 16 for(int i=0;i<n;i++){ 17 dp[0][i]=1; 18 } 19 for(int i=1;i<m;i++){ 20 for(int j=1;j<n;j++){ 21 dp[i][j]=dp[i-1][j]+dp[i][j-1]; 22 } 23 } 24 return dp[m - 1][n - 1]; 25 } 26 }
备忘录递归法:
1 import java.util.*; 2 3 4 public class Solution { 5 /** 6 * 7 * @param m int整型 8 * @param n int整型 9 * @return int整型 10 */ 11 int[][] hash=new int[200][200]; 12 public int uniquePaths (int m, int n) { 13 if(m<0||n<0) return -1; 14 if(m==1||n==1) return 1; 15 if(hash[m][n]!=0) return hash[m][n]; 16 hash[m][n]=uniquePaths(m-1,n)+uniquePaths(m,n-1); 17 return hash[m][n]; 18 } 19 }