首页 > 其他分享 >力扣-不同路径2

力扣-不同路径2

时间:2023-09-12 20:58:02浏览次数:70  
标签:障碍物 nums int 不同 路径 网格 力扣 dp

1.问题描述

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?

网格中的障碍物和空位置分别用 1 和 0 来表示。

示例 1:

输入:

[

  [0,0,0],

  [0,1,0],

  [0,0,0]

]

输出: 2

解释:

3x3 网格的正中间有一个障碍物。

从左上角到右下角一共有 2 条不同的路径:

1. 向右 -> 向右 -> 向下 -> 向下

2. 向下 -> 向下 -> 向右 -> 向右

2.说明

m 和 n 的值均不超过 100。

输入说明:

首先输入矩阵的行数m和列数n

然后输入m行,每行n个字符0或1。中间无空格分隔。

说明:m 和 n 的值均不超过 100。

输出说明:

输出一个整数

3.范例

输入范例:

3 3
000
010
000

输出范例:

2

4.思路

跟“不同路径1”的思路差不多,但本题存在了障碍物,只要在障碍物的dp数组中,其值为0,即可。

其中dp [i] [j] 表示在此位置时,有多少路径,当(x, y)处有障碍物时,则dp[x] [y]=0.

初始化dp数组时,第一行和第二行的 dp[i] [0]和 dp[0] [i]代表的是其到达该位置时有多少条路径,因为是第一行和第一列,因此到达[i] [j]的路径均只有1条,因此初始化时:

dp[i][0]=1;

dp[0][i]=1;

同时注意第一行和第一列存在障碍物时,则到达障碍物之后的位置,是没有路径到达的,因为机器人只能向下或向右移动!!!

注意:输入数组时,没有以空格来隔开0和1,因此输入的是字符串/字符,不是整型!!!

5.代码

#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
class Solution
{
public:

    int findpath(vector<vector<char> > &nums)
    {
        int m=nums.size();
        int n=nums[0].size();
        vector<vector<int>> dp(m,vector<int> (n,0));
        for(int i=0;i<m&&nums[i][0]=='0';i++) dp[i][0]=1;
        for(int j=0;j<n&&nums[0][j]=='0';j++) dp[0][j]=1;
        for(int i=1;i<m;i++)
        {
            for(int j=1;j<n;j++)
            {
                if(nums[i][j]=='1')
                    continue;
                    dp[i][j]=dp[i-1][j]+dp[i][j-1];
            }
        }
        return dp[m-1][n-1];
        }
};
int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    int m,n;
    cin>>m>>n;
    char data;
    vector<vector<char>> nums;
    for(int i=0;i<m;i++)
    {
        vector<char> row;
        for(int j=0;j<n;j++)
        {
            cin>>data;
            row.push_back(data);
        }
        nums.push_back(row);
    }

    int res=Solution().findpath(nums);
    cout<<res<<endl;
    return 0;
}

 

标签:障碍物,nums,int,不同,路径,网格,力扣,dp
From: https://www.cnblogs.com/ohye/p/17697770.html

相关文章

  • 绝对路径和相对路径
    绝对路径和相对路径绝对路径:这种类型的叫做绝对路径,从根目录(C/D/E)开始只读或只写path=r'D:\pythonProject任务\循环和嵌套\头部信息.py'f=open(path,'w') #r-->read只读;w-->只写,清空当前文件后写入,自动创建文件f.write('nickhandsome')f.close() #清......
  • kubernetes部署mongoDB 单机版 自定义配置文件、密码、日志路径等
    来源:https://aijishu.com/a/1060000000097166官方镜像地址: https://hub.docker.com/_/mong...docker版的mongo移除了默认的/etc/mongo.conf,修改了db数据存储路径为/data/db.创建configmap配置,注意不能加fork=true,否则Pod会变成Completed。apiVersion:v1kind:ConfigMap......
  • SQL字段不同值数量统计
    SELECT customer_id, count(*)numFROM uic_contractGROUPBY customer_idORDERBY numdescSELECT uea.energy_id, uep.prod_name, sum(uea.cost_num)numFROM uic_energy_accountuea LEFTJOINuic_energy_produepONuep.id=uea.energy_idWHERE u......
  • 不同小图标的编码网页中的大于号,小于号,应该用编码来代替,HTML中特殊字符和与之对应的A
    上面两个符号的HTML代码,>< >< 应用场景:当使用键盘无法打出来的时候。因为我测试在html代码中使用&amp;和&是等价的。带有实体名称的ASCII实体 常用的几个结果描述实体名称实体编号"quotationmark"&#34;'apostrophe&apos;&#39;&amper......
  • Python合并不同Word并同时添加多个分页符的方法
      本文介绍基于Python,实现对多个Word文档加以自动合并,并在每次合并时按要求增添一个分页符的方法。  现有多个Word文档文件,需将其按名称顺序合并为一个新的Word文件,且需保证每一次合并时,都另起一页(即新的Word文件一页中,不能出现两个及以上的原本单个Word文件的内容)。  一般......
  • 不同PID写一篇对比
    PID是一种广泛使用的控制算法,用于控制系统的稳定性,它可以根据系统的误差,计算出控制信号,以减小误差。PID有多种变体,包括PI、PD和PID控制器,每种控制器都有不同的特性,适用于不同的应用场景。本文将对PID的三种变体进行比较研究。一、标准PIDPID控制器的核心是其比例-积分-微分三个环节......
  • 关于spring的注解作用(springboot相较于spring 的不同)
      springboot的@Bean注解作用在方法上,它会将这个方法返回的类型实例注入spring容器。  <bean>标签代表一个实例(或对象),而不是一个类型。在Spring中,<bean>标签用于声明和配置一个bean实例。当我们在XML配置文件中使用<bean>标签时,我们定义的是一个具体的b......
  • 力扣--两数相加
    2.两数相加给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字0之外,这两个数都不会以0开头。示例1:输入:l1=[2,4,3],l2=[5......
  • 力扣--两数之和
    1.两数之和给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例1:输入:nums=[2......
  • 安卓核心板的不同核心规格及架构介绍
    安卓核心板是将核心功能封装的一块电子主板,集成芯片、存储器和功放器件等,并提供标准接口的芯片。其特点:●能跑Android等操作系统强大的功能及丰富的接口支持LCD/TP,Audio,Camera,Video,内置WI-Fi/BT/GNSS功能●集成度高,扩展能力强●安卓核心板内部集成基带以及射频,简化了硬件......