classSolution{publicintuniquePaths(int m,int n){int[][] dp =newint[m][n];//初始话dp数组//由于机器人只能向右或者向下移动所以下和左的两条边线路径只能是1for(int i =0; i < m; i++){
dp[i][0]=1;}for(int j =0; j < n; j++){
dp[0][j]=1;}//dp[i][j] = dp[i-1][j] + dp[i][j-1] 例--->dp[1][1] = dp[0][1] + dp[1][0]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];}}
63.不同路径Ⅱ
动规
思路
与62.不同路径的不同点
如果障碍点在上左两个边界上出现那么边界上之后的节点路径数都为0
dp[i][j]是障碍点那么路径数为0
classSolution{publicintuniquePathsWithObstacles(int[][] obstacleGrid){int m = obstacleGrid.length;int n = obstacleGrid[0].length;if(obstacleGrid[m-1][n-1]==1){return0;}int[][] dp =newint[m][n];for(int i =0; i < m; i++){//障碍点及之后的点都为0if(obstacleGrid[i][0]==1){break;}
dp[i][0]=1;}for(int i =0; i < n; i++){//障碍点及之后的点都为0if(obstacleGrid[0][i]==1){break;}
dp[0][i]=1;}for(int i =1; i < m; i++){for(int j =1; j < n; j++){// 如果当前点为障碍点当前点的路径数为0if(obstacleGrid[i][j]==1){continue;}
dp[i][j]= dp[i-1][j]+ dp[i][j-1];}}return dp[m-1][n-1];}}