实现思路:
今天的两道题没用dp,都是dfs+记忆化,其实差不多,直接上代码,很简单。
实现代码:
class Solution {
public int uniquePaths(int m, int n) {
int[][] d=new int[m][n];
int ans=0;
ans=dfs(0,0,m-1,n-1,d);
return ans;
}
public int dfs(int x,int y,int finish_x,int finish_y,int[][] d){
if(x==finish_x&&y==finish_y){
return 1;
}else if(x>finish_x||y>finish_y){
return 0;
}else if(d[x][y]!=0){
return d[x][y];
}
d[x][y]=dfs(x+1,y,finish_x,finish_y,d)+dfs(x,y+1,finish_x,finish_y,d);
return d[x][y];
}
}
实现思路:
略
实现代码:
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int m=obstacleGrid.length,n=obstacleGrid[0].length;
int[][] d=new int[m][n];
return dfs(0,0,m-1,n-1,d,obstacleGrid);
}
public int dfs(int x,int y,int finish_x,int finish_y,int[][] d,int[][] ob){
if(x==finish_x&&y==finish_y&&ob[x][y]!=1){
return 1;
}else if(x>finish_x||y>finish_y||ob[x][y]==1){
return 0;
}else if(d[x][y]!=0){
return d[x][y];
}
d[x][y]=dfs(x+1,y,finish_x,finish_y,d,ob)+dfs(x,y+1,finish_x,finish_y,d,ob);
return d[x][y];
}
}