63. Unique Paths II

来源:互联网 发布:免费网络云盘哪个好用 编辑:程序博客网 时间:2024/05/16 12:47

此题与Unique Paths的解法一样,f[j]表示从(0,0)到(当前row, j)有几种走法,上面来的就是自己,左边来的已经算好了,所以 f[j] = f[j] + f[j – 1]。需要特别注意f的初始化值和循环的起始值。下面的这段代码非常精妙,需要好好理解掌握。代码如下:

class Solution {public:    int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {        int m = (int)obstacleGrid.size(), n = (int)obstacleGrid[0].size();        // one way DP, f[i] means from (0, 0) to (currRow, i) has how many ways        vector<int> f(n, 0);        f[0] = obstacleGrid[0][0] ? 0 : 1;        for (int i = 0; i < m; i++) {            for (int j = 0; j < n; j++) { //comes from above or left                if (obstacleGrid[i][j]) {                    f[j] = 0;                } else {                    if (j == 0) //first col only from above                        f[j] = f[j];                    else                        f[j] = f[j] + f[j - 1]; //这一行代码逻辑非常微妙                }            }        }        return f[n - 1];    }};



0 0