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]; } };