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

leetcode做题笔记62

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

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

问总共有多少条不同的路径?

思路一:动态规划

int uniquePaths(int m, int n){int dp[m][n];int i,j=0;for(i=0;i<m;++i){for(j=0;j<n;++j){if(i==0||j==0){dp[i][j]=1;}else{dp[i][j]=dp[i-1][j]+dp[i][j-1];}}}return dp[m-1][n-1];
}

时间复杂度O(mn),空间复杂度O(mn)

分析:

本题要求从左上角到右下角共有多少条不同路径,可利用动态规划,到每个格子的不同路径等于到左边前一个路径数加上边前一个路径数,最后返回dp[m-1][n-1]

思路二:组合排列

int Combinations(int up, int down){long prod = 1;int left = down - up + 1, right = 1;while(right <= up){prod *= left;prod /= right;left++;right++;}return prod;
}int uniquePaths(int m, int n){int para = (m - 1 < n - 1) ? m - 1 : n - 1;return Combinations(para, m + n - 2);
}

时间复杂度O(n),空间复杂度O(1)

分析:

本题同时可直接用排列组合进行计算,因为机器人需要向下走n-1步,向右走m-1步,即共走m+n-2步中间有n-1步向下走,计算即可得到答案。

比较:

两个思路比较,组合排列的方式可直接计算结果,避免构造数组,在内存方面占优,且组合排列计算的时间复杂度为O(n)优于第一种不断向后递推的思路,运行速度更快。

总结:

本题考察动态规划的应用,每个格子考虑左边前一个和上边前一个的值,或直接使用组合排列的方法得到答案。

http://www.lryc.cn/news/115239.html

相关文章:

  • 图论 <最短路问题>模板
  • 计算机网络性能指标
  • vue + elementUI 实现下拉树形结构选择部门,支持多选,支持检索
  • 招投标系统简介 企业电子招投标采购系统源码之电子招投标系统 —降低企业采购成本 tbms
  • 半监督学习(主要伪标签方法)
  • datePicker一个或多个日期组件,如何快捷选择多个日期(时间段)
  • 【语音合成】微软 edge-tts
  • elevation mapping学习笔记3之使用D435i相机离线或在线订阅点云和tf关系生成高程图
  • ESP32 Max30102 (3)修复心率误差
  • 16-4_Qt 5.9 C++开发指南_Qt 应用程序的发布
  • oracle容灾备份怎么样Oracle容灾备份
  • AcWing 4957:飞机降落
  • 强化学习研究 PG
  • uniapp微信小程序 401时重复弹出登录弹框问题
  • Cloud Studio实战——热门视频Top100爬虫应用开发
  • php 去除二维数组重复
  • 玩转graphQL
  • 神经网络super(XXX, self).__init__()的含义
  • 45.杜芬方程解仿真解曲线(matlab程序)
  • 服务器数据恢复-EXT3分区误删除邮件的数据恢复案例
  • C 语言的逗号运算符
  • 无人车沿着指定线路自动驾驶与远程控制的实践应用
  • C++ 多态性——纯虚函数与抽象类
  • 小程序如何使用防抖和节流?
  • 计算机三级网络技术(持续更新)
  • Django Rest_Framework(二)
  • Kotlin~Visitor访问者模式
  • LVS-DR模式集群构建过程演示
  • UML-A 卷-知识考卷
  • BpBinder与PPBinder调用过程——Android开发Binder IPC通信技术