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

  

posted @ 2015-04-08 16:38  天丶下  阅读(121)  评论(1编辑  收藏  举报