这种题目大多不用搜索,首选简单数学方法和动态规划。这里用的是动态规划如果网络只有两行的话可以用数学方法。简单的dp问题,题目求什么dp数组设什么就好。转移条件也很简单。注意判断边界情况,数组设置成long long不然会爆int。
class Solution { public: int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) { long long dp[105][105]; if(obstacleGrid.empty()||obstacleGrid[0].empty()) { return 0; } if(obstacleGrid[0][0]==1) return 0; int row=obstacleGrid.size(); int col=obstacleGrid[0].size(); int i; dp[0][0]=1; for(i=0;i<row;i++) { if(obstacleGrid[i][0]!=0) { for(;i<row;i++) { dp[i][0]=0; } break; } else dp[i][0]=1; } for(i=0;i<col;i++) { if(obstacleGrid[0][i]==1) { for(;i<col;i++) dp[0][i]=0; break; } else dp[0][i]=1; } int j; for(i=1;i<row;i++) { for(j=1;j<col;j++) { if(obstacleGrid[i][j]==1) dp[i][j]=0; else dp[i][j]=dp[i][j-1]+dp[i-1][j]; } } return dp[row-1][col-1]; } };