题目:63. 不同路径 II
思路:动态规划dp,时间复杂度0(nm)。
C++版本:
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
int n=obstacleGrid.size(),m=obstacleGrid[0].size();
vector<vector<int>> f(n+1,vector<int>(m+1,0));
f[0][1]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(obstacleGrid[i-1][j-1]==1) continue;
f[i][j]=f[i-1][j]+f[i][j-1];
}
}
return f[n][m];
}
};
JAVA版本:
class Solution {
public int uniquePathsWithObstacles(int[][] obstacleGrid) {
int n=obstacleGrid.length,m=obstacleGrid[0].length;
int[][] f = new int[n+1][m+1];
f[0][1]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(obstacleGrid[i-1][j-1]==1) continue;
f[i][j]=f[i-1][j]+f[i][j-1];
}
}
return f[n][m];
}
}
Go版本:
func uniquePathsWithObstacles(obstacleGrid [][]int) int {
n,m:=len(obstacleGrid),len(obstacleGrid[0])
f:=make([][]int,n+1)
for i:=range f {
f[i]=make([]int,m+1)
}
f[0][1]=1
for i:=1;i<=n;i++ {
for j:=1;j<=m;j++ {
if obstacleGrid[i-1][j-1] == 1 {
continue
}
f[i][j]=f[i-1][j]+f[i][j-1]
}
}
return f[n][m]
}