思路:
当前位置为1,走法为0;当前位置为0,走法=当前位置的上边位置的走法+当前位置的左边位置的走法
注意边界的处理
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
int row =obstacleGrid.size();//获取行数
if (row==0) {
return 0;
}
int column=obstacleGrid[0].size();//获取列数
vector<vector<int>> fun(row,vector<int>(column));//开辟相同大小的矩阵,并初始化为0
int i,j;
for (i=0; i<row; ++i) {
for (j=0; j<column; ++j) {
fun[i][j]=0;
}
}
//特殊位置处理
fun[0][0]=(obstacleGrid[0][0]==1?0:1);//fun[0][0]
for (i=1; i<row; ++i) {//第一列,注意i从1开始
fun[i][0]=(obstacleGrid[i][0]==1?0:fun[i-1][0]);
}
for (j=1; j<column; ++j) {//第一行
fun[0][j]=(obstacleGrid[0][j]==1?0:fun[0][j-1]);
}
//从fun[1][1]开始处理
for (i=1; i<row; ++i) {
for (j=1; j<column; ++j) {
fun[i][j]=(obstacleGrid[i][j]==1?0:(fun[i-1][j]+fun[i][j-1]));
}
}
return fun[row-1][column-1];
}
};
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
vector<vector<int>> fun(obstacleGrid.size(),vector<int>(obstacleGrid[0].size()));
fun[0][0]=(obstacleGrid[0][0]==1?0:1);
for (int i=1; i<obstacleGrid.size(); ++i) {
fun[i][0]=(obstacleGrid[i][0]==1?0:fun[i-1][0]);
}
for (int j=1; j<obstacleGrid[0].size();++j) {
fun[0][j]=(obstacleGrid[0][j]==1?0:fun[0][j-1]);
}
for (int i=1;i<obstacleGrid.size(); ++i) {
for (int j=1; j<obstacleGrid[0].size();++j) {
fun[i][j]=(obstacleGrid[i][j]==1?0:(fun[i-1][j]+fun[i][j-1]));
}
}
return fun[obstacleGrid.size()-1][obstacleGrid[0].size()-1];
}
};
class Solution {
public:
//状态定义为从起点--当前节点的走法
int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
if(obstacleGrid.size()==0){
return 0;
}
int sum[obstacleGrid.size()][obstacleGrid[0].size()];
//状态初始化
sum[0][0]=(obstacleGrid[0][0]==0?1:0);
for(int i=1;i<obstacleGrid.size();++i){
sum[i][0]=(obstacleGrid[i][0]==1?0:sum[i-1][0]);
}
for(int j=1;j<obstacleGrid[0].size();++j){
sum[0][j]=(obstacleGrid[0][j]==1?0:sum[0][j-1]);
}
//状态转移
for(int i=1;i<obstacleGrid.size();++i){
for(int j=1;j<obstacleGrid[0].size();++j){
sum[i][j]=(obstacleGrid[i][j]==1?0:(sum[i-1][j]+sum[i][j-1]));
}
}
return sum[obstacleGrid.size()-1][obstacleGrid[0].size()-1];
}
};