zoukankan      html  css  js  c++  java
  • LeetCode 063. 不同路径 II dp 配图

    地址 https://leetcode-cn.com/problems/unique-paths-ii/

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
    
    机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
    
    现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
    
     网格中的障碍物和空位置分别用 10 来表示。
    
     
    
    示例 1:
    输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]
    输出:2
    解释:
    3x3 网格的正中间有一个障碍物。
    从左上角到右下角一共有 2 条不同的路径:
    1. 向右 -> 向右 -> 向下 -> 向下
    2. 向下 -> 向下 -> 向右 -> 向右
    
    示例 2:
    输入:obstacleGrid = [[0,1],[0,0]]
    输出:1
     
    
    提示:
    m == obstacleGrid.length
    n == obstacleGrid[i].length
    1 <= m, n <= 100
    obstacleGrid[i][j] 为 01

    算法1
    这是Leetcode 062的加强版

    同样的是dp
    dp[i][j] = dp[i-1][j] + dp[i][j-1];
    有障碍物的格子 置零

    class Solution {
    public:
        int dp[110][110];
        int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {
            if(obstacleGrid.empty() || obstacleGrid[0][0] == 1 || obstacleGrid[obstacleGrid.size()-1][obstacleGrid[0].size()-1] == 1) return 0;
            memset(dp,0,sizeof dp);
            dp[0][0] = 1;
            for(int i = 0; i< obstacleGrid.size();i++){
                for(int j = 0; j < obstacleGrid[0].size();j++){
                    if(i >0 && obstacleGrid[i][j] == 0){
                        dp[i][j]+= dp[i-1][j];
                    } 
                    if(j >0 && obstacleGrid[i][j] ==0){
                        dp[i][j] += dp[i][j-1];
                    }
                }
            }
    
            return dp[obstacleGrid.size()-1][obstacleGrid[0].size()-1];
        }
    };
    
     
  • 相关阅读:
    C# 3.0特性
    C# 4.0特性
    Mvc系统学习9——Areas学习
    MVC系统学习8——AsyncController
    MVC系统学习7—Action的选择过程
    MVC系统学习6—Filter
    MVC系统学习5——验证
    对象排序
    Spring上下文信息获取简单实现
    设计模式
  • 原文地址:https://www.cnblogs.com/itdef/p/14220543.html
Copyright © 2011-2022 走看看