63:Unique Paths II 【DP】【数组】
题目链接:click~
/*题意:n*m的矩阵,从左上角走到右下角共有多少条路径(只能向右或向下)
* 矩阵中1表示障碍物
*/
/**
*思路:DP,d[i][j]表示当前到达d[i][j]路径总数
* 状态转移方程:d[i][j] = d[i-1][j] + d[i][j-1]
* 需判断是否有障碍物
*/
class Solution {
public:
int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
int d[105][105];
int n = obstacleGrid.size();
int m = obstacleGrid[0].size();
d[0][0] = (obstacleGrid[0][0]==0 ? 1:0);
for(int i = 1; i < n; i ++)
d[i][0] = ( obstacleGrid[i][0]==0 ? d[i-1][0]:0);//左边界
for(int j = 1; j < m; j ++)
d[0][j] = ( obstacleGrid[0][j]==0 ? d[0][j-1]:0);//右边界
for(int i = 1; i < n; i ++)
for(int j = 1; j < m; j ++) {
if(obstacleGrid[i][j] == 1) //有障碍物
d[i][j] = 0;
else //累计上面和左面的路径数
d[i][j] = d[i-1][j] + d[i][j-1];
}
return d[n-1][m-1];
}
};
浙公网安备 33010602011771号