Unique Paths II
来源:互联网 发布:云计算 旅游 编辑:程序博客网 时间:2024/05/21 08:58
Follow up for "Unique Paths":
Now consider if some obstacles are added to the grids. How many unique paths would there be?
An obstacle and empty space is marked as 1
and 0
respectively in the grid.
For example,
There is one obstacle in the middle of a 3x3 grid as illustrated below.
[ [0,0,0], [0,1,0], [0,0,0]]
The total number of unique paths is 2
.
Note: m and n will be at most 100.
dp解法,注意第一行或第一列有一个为1,则该行或该列后到达路径全为0.
public class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { if(obstacleGrid==null || obstacleGrid[0][0]==1) return 0; int m=obstacleGrid.length; int n=obstacleGrid[0].length; int [][]f=new int[m][n]; for(int i=0;i<n;i++){ if(obstacleGrid[0][i]==0) f[0][i]=1; else{ for(int k=i;k<n;k++) f[0][k]=0; break; } } for(int j=0;j<m;j++){ if(obstacleGrid[j][0]==0) f[j][0]=1; else{ for(int k=j;k<m;k++) f[k][0]=0; break; } } for(int i=1;i<m;i++){ for(int j=1;j<n;j++){ if(obstacleGrid[i][j]==1) f[i][j]=0; else{ f[i][j]=f[i-1][j]+f[i][j-1]; } } } return f[m-1][n-1]; }}滚动数组dp
public class Solution { public int uniquePathsWithObstacles(int[][] obstacleGrid) { if(obstacleGrid==null || obstacleGrid[0][0]==1) return 0; int m=obstacleGrid.length; int n=obstacleGrid[0].length; int []f=new int[n]; for(int i=0;i<n;i++){ if(obstacleGrid[0][i]==0) f[i]=1; else{ for(int k=i;k<n;k++) f[k]=0; break; } } for(int i=1;i<m;i++){ for(int j=0;j<n;j++){ if(j==0 ){ if(obstacleGrid[i][j]==1){ f[j]=0; } continue; } if(obstacleGrid[i][j]==1) f[j]=0; else{ f[j]=f[j]+f[j-1]; } } } return f[n-1]; }}dfs
public class Solution { public int [][]f; public int uniquePathsWithObstacles(int[][] obstacleGrid) { if(obstacleGrid==null || obstacleGrid[0][0]==1) return 0; int m=obstacleGrid.length; int n=obstacleGrid[0].length; f=new int[m+1][n+1]; return dfs(m,n,obstacleGrid); } public int dfs(int m,int n,int[][] obstacleGrid){ if(m<1 || n<1 || obstacleGrid[m-1][n-1]==1) return 0;// if(m==1 && n==1) return 1;//reach start point return record(m-1,n,obstacleGrid)+record(m,n-1,obstacleGrid);// } public int record(int x,int y,int[][] obstacleGrid){ if(f[x][y]>0) return f[x][y]; else return f[x][y]=dfs(x,y,obstacleGrid); }}
0 0
- Unique Paths & Unique Paths II
- Unique Paths &&Unique Paths II
- Unique Paths & Unique Paths II
- Unique Paths & Unique Paths II
- LeetCode: Unique Paths II
- [Leetcode] Unique Paths II
- LeetCode : Unique Paths II
- Unique Paths II
- [LeetCode] Unique Paths II
- unique paths II
- Unique Paths II
- [LeetCode]Unique Paths II
- Unique Paths II
- Unique Paths II
- Unique Paths II
- Unique Paths II
- [leetcode]Unique Paths II
- Unique Paths II
- FFMpeg写MP4文件例子分析
- hdu2031进制转换
- oracle函数计算两个坐标点距离
- hdu 4504 威威猫系列故事——篮球梦 Dp
- SQL 分页查询语句
- Unique Paths II
- Ubuntu 14.04 安装TFTP server
- Qt-文件操作
- CSS3的border-radius属性画出圆圈效果(border-width带值)
- UVA - 11859 Division Game
- 第六个驱动程序-tq2440
- java中的static用法
- 产生9个互不相同的随机数
- linux套接字编程