题意:一个二维数组从左上角到右下角的路径数,为1表示有故障不可通行。
由于最近经常做DFS的题。拿到题首先想到的是递归的解法,所有超时了。发现DP的解法非常简单。discuss里有非常容易理解的解法。下面是我的递归解法,也很简单,贴出来,提醒自己一些易错的点。注意左上点和右下点为1的情况要考虑。
int result = 0;
int row = 0;
int column = 0;
int uniquePath(vector<vector<int>>& obstacleGrid, int m, int n)
{
if (m == row - 1 && n == column - 1&&obstacleGrid[m][n] != 1)
result++;
else
{
//往右
if (n + 1<column&&obstacleGrid[m][n + 1] != 1)
uniquePath(obstacleGrid, m, n + 1);
//往下
if (m + 1<row&&obstacleGrid[m + 1][n] != 1)
uniquePath(obstacleGrid, m + 1, n);
}
return result;
}
int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
row = obstacleGrid.size();
if (row == 0)
return 0;
if (row>0)
column = obstacleGrid[0].size();
if( obstacleGrid[0][0]!=1)
return uniquePath(obstacleGrid, 0, 0);
else
return 0;
}