zoukankan      html  css  js  c++  java
  • lintcode-115-不同的路径 II

    115-不同的路径 II

    "不同的路径" 的跟进问题:
    现在考虑网格中有障碍物,那样将会有多少条不同的路径?
    网格中的障碍和空位置分别用 1 和 0 来表示。

    注意事项

    m 和 n 均不超过100

    样例

    如下所示在3x3的网格中有一个障碍物:
    [
    [0,0,0],
    [0,1,0],
    [0,0,0]
    ]
    一共有2条不同的路径从左上角到右下角。

    标签

    动态规划 数组

    思路

    延续lintcode-114-不同的路径的思路,在遇到障碍时,dp[i][j] = 0

    code

    class Solution {
    public:
        /**
         * @param obstacleGrid: A list of lists of integers
         * @return: An integer
         */ 
        int uniquePathsWithObstacles(vector<vector<int> > &obstacleGrid) {
            // write your code here
            if(obstacleGrid.size() <= 0 || obstacleGrid[0].size() <= 0) {
                return 0;
            }
    
            int m = obstacleGrid.size(), n = obstacleGrid[0].size();
            vector<vector<int> > dp(m, vector<int>(n, INT_MAX));
            for(int i=0; i<m; i++) {
                for(int j=0; j<n; j++) {
                    if(obstacleGrid[i][j] == 1) {
                        dp[i][j] = 0;
                        continue;
                    }
                    if(i == 0 && j == 0) {
                        dp[i][j] = 1;
                    }
                    else if(i == 0 && j > 0) {
                        dp[i][j] = dp[i][j-1];
                    }
                    else if(i > 0 && j == 0) {
                        dp[i][j] = dp[i-1][j];
                    }
                    else if(i > 0 && j > 0) {
                        dp[i][j] = dp[i][j-1] + dp[i-1][j];
                    }
                }
            }
            
            return dp[m-1][n-1];
        }
    };
    
  • 相关阅读:
    “访问”美术馆
    加分二叉树
    有线电视网
    二叉苹果树
    鬼子进村
    遍历问题
    最大子树和
    FBI树
    求前序遍历
    JS如何实现点击页面内任意的链接均加参数跳转?
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7202162.html
Copyright © 2011-2022 走看看