当前位置: 首页 > news >正文

leetcode 63 不同路径II

一、题目描述

二、解题思路

解法一:深度优先搜索(超时)

(1)uniquePathsWithObstacles函数

<1>边界处理,如果起点或者终点是障碍物,就返回0;

<2>否则,就对起点(0,0)位置调用dfs函数,寻找合法路径;

<3>最终返回path,即为所求;

(2)dfs函数

<1>函数功能:dfs函数用于寻找以(i,j)为起点,(m-1,n-1)位置为终点的合法路径的数量;

<2>函数实现:

1)递归出口:如果起点为终点,就将path++,并return;

2)函数体:按照右、下的顺序探索(i,j)位置的相邻块(x,y),如果合法就对(x,y)位置调用dfs函数;

解法二:动态规划

(1)dp[row][col]的含义

dp[row][col]表示从起点到(row,col)位置的合法路径的总数;

(2)初始化

需要对第一行和第一列进行初始化,如果当前行(列)当前位置之前没有障碍物,则dp[row][col]=1,否则,障碍位置之后的所有位置均不可到达,即dp[row][col]=0。

例如,当obstacleGrid=[[0,1,0,0]],则第一行障碍物位置及其后面的位置均不可达,为dp[row][col]为0;

(3)状态转移方程

由于机器人只能向右或者向下行走,所以dp[row][col]=dp[row-1][col]+dp[row][col-1](row>=1&&col>=1);

三、代码实现

解法一:深度优先搜索(超时)

class Solution {int m,n;int path;
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {//深度优先搜索m=obstacleGrid.size();n=obstacleGrid[0].size();path=0;//边界处理if(obstacleGrid[0][0]==1||obstacleGrid[m-1][n-1]==1) return 0;dfs(obstacleGrid,0,0);return path;}int dx[2]={0,1};int dy[2]={1,0};void dfs(vector<vector<int>>& obstacleGrid,int i,int j){//递归出口if(i==m-1&&j==n-1){path++;return ;}for(int k=0;k!=2;k++){int x=i+dx[k];int y=j+dy[k];if(x>=0&&x<m&&y>=0&&y<n&&obstacleGrid[x][y]==0)dfs(obstacleGrid,x,y);}}
};

解法二:动态规划

class Solution {
public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {//动态规划int m=obstacleGrid.size();int n=obstacleGrid[0].size();//边界处理if(obstacleGrid[0][0]==1||obstacleGrid[m-1][n-1]==1)return 0;vector<vector<int>>dp (m,vector<int>(n,0));//初始化第一行(列)int flag=0;   //flag用于标志第一行(列)是否已经遇到了障碍for(int i=0;i!=m;i++) {if(obstacleGrid[i][0]==1)flag=1;dp[i][0]=flag==1?0:1;}flag=0;for(int j=0;j!=n;j++){if(obstacleGrid[0][j]==1)flag=1;dp[0][j]=flag==1?0:1;}//填写dp数组剩余的部分for(int row=1;row<m;row++)for(int col=1;col<n;col++){if((row==0||col==0)&&obstacleGrid[row][col]==0) dp[row][col]=1;else if(obstacleGrid[row][col]==0)dp[row][col]=dp[row-1][col]+dp[row][col-1];}return dp[m-1][n-1];}
};

http://www.dtcms.com/a/605435.html

相关文章:

  • 网站的当前位置导航如何做免费域名注册免费空间
  • 研发管理知识库(12)阿里“云效”使用方案简介
  • 中文共情对话数据集2023年和2025年
  • 如何制作网站的步骤网店美工的作用
  • 网站标ico怎么做苏州seo推广公司
  • springboot实现跨服务调用/springboot调用另一台机器上的服务
  • 代价复杂度剪枝(CCP)详解:原理、实现与应用
  • 温州微网站公司看网红直播做爰的网站
  • Katalon Studio的功能介绍
  • 电子商务公司的经营范围企业seo关键词优化
  • 定义 LLM 格局:开源与闭源两大阵营的较量
  • 数智化时代:AI技术重构企业财务管理系统的底层逻辑与实践
  • 阿里“千问”破局C端AI:开源基石与B端势能的双重革命
  • 从生成内容角度介绍开源AI大模型
  • 碳中和终极武器——嵌入式AI重构能源管理战局
  • RikkaHub 1.6.11 | 开源的本地大型语言模型聚合应用,支持多种AI服务提供商
  • 企业网站及公众号建设方案河南郑州解封通知
  • ios包体积管理方案
  • 邵阳网站优化中国建设劳动学会监制网站
  • 开源监控体系Prometheus Thanos Grafana Alertmanager
  • 认知神经科学解释生活中的现象——白月光、朱砂痣
  • 【ZeroRange WebRTC】RFC 5766:TURN 协议规范(中文整理与译注)
  • php网站开发价格wordpress当地时间
  • 在线单页网站制作小米发布会直播在线
  • 移动端跨平台开发深度解析:UniApp、Taro、Flutter 与 React Native 对比
  • Redis的优势和特点
  • 个人做跨境电商网站有哪些网站建设信用卡分期手续费
  • 玛伐凯泰胶囊(Mavacamten)——梗阻性肥厚型心肌病(oHCM)靶向治疗新突破
  • Android16 更新fastboot版本解决fastbootd模式识别不到设备问题
  • C#面试题及详细答案120道(86-95)-- 进阶特性