不同路径(一个机器人位于一个 m x n 网格的左上角)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?
示例 1:
输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右
示例 2:
输入: m = 7, n = 3
输出: 28
解题思路:这道题,可以这么理解,在这个矩形网格框内,第一行和第一列中的每一位置,到达的可能路径都为1。对其他位置,到达的可能路径数量为其正上面位置对应路径的数量加上左边路径的数量(因为只可以向下走或者向右走)。如下表可以看出这一点。
时间复杂度为O(m*n) 空间复杂度为O(m*n)
public class Test {public static void main(String[] args) {Solution s = new Solution();int m = 3;int n = 7;System.out.println(s.uniquePaths(m,n));}
}class Solution {public int uniquePaths(int m, int n) {int[][] dp = new int[m][n];for (int i = 0; i < m; i++) {for (int 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(m*n),空间复杂度变小O(n)。
public class Test {public static void main(String[] args) {Solution s = new Solution();int m = 3;int n = 7;System.out.println(s.uniquePaths(m,n));}
}class Solution {public int uniquePaths(int m, int n) {int[] dp = new int[n];for (int i = 0; i < m; i++) {for (int j =0 ; j < n; j++) { if(i == 0 ){dp[j] += 1;}if(i != 0 && j != 0){dp[j] += dp[j-1]; }}}return dp[dp.length-1];}
}
不同路径(一个机器人位于一个 m x n 网格的左上角)相关推荐
- Leetcode:62题 不同路径(一个机器人位于一个 m x n 网格的左上角 。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角)
题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为&q ...
- 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 总共多少步
所有实现代码均使用JAVA letcode上的算法题,贴原图 首先来分析一下,网格可以使用二维数组来实现,以下图为例 m = 2,n = 3 ,起点为 1([0][0]),终点为 6([1][2]) ...
- 一个机器人位于m x n网格的左上角达到网格的右下角,有多少条不同的路径?
一个机器人位于m x n网格的左上角(起始点标记为Start). 机器人每次只能向下或向右移动一步.机器人试图达到网格的右下角(标记为Finish). 有多少条不同的路径? Start 1 1 1 2 ...
- 【蓝桥杯】有一张 m×n 个小方格的地图,一个机器人位于地图的左上角,它每步只能向右或者向下移动一格。。。
题目描述 有一张 m×n 个小方格的地图,一个机器人位于地图的左上角(如图标记为 Start 的地方),它每步只能向右或者向下移动一格,如果走到右下角的终点(如图标记为 Finish 的地方),有多少 ...
- 动态规划-机器人位于m x n网格的左上角只能向下向右移动,有多少路径
package com.algorithm.dynamicprogramming;/*** 算法描述:机器人位于m x n网格的左上角(下图中标记为"开始").* 机器人只能在任何 ...
- 在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。
在二维平面上,有一个机器人从原点 (0, 0) 开始.给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束. 移动顺序由字符串表示.字符 move[i] 表示其第 i 次移动.机器 ...
- 一个机器人在m×n大小的地图的左上角(起点,下图中的标记“start“的位置)。 机器人每次向下或向右移动。机器人要到达地图的右下角。(终点,下图中的标记“Finish“的位置)。 可以有多少种不同
题目描述 一个机器人在m×n大小的地图的左上角(起点,下图中的标记"start"的位置). 机器人每次向下或向右移动.机器人要到达地图的右下角.(终点,下图中的标记"Fi ...
- 收到一个机器人txt微盘_robots . txt是什么?
txt文本文件网站管理员创建指导网络机器人(通常是搜索引擎机器人)如何在网站上抓取页面. 机器人. txt文件是机器人排除协议的一部分(代表),一组web标准调节机器人抓取网页,如何访问和索引内容,服 ...
- 安装Linux时,引导分区位于一个GPT分区方案的错误提示
在安装Linux时,如果机器之前装过VMware EXi5系统,在分区时会出现 ************************* 分区错误 您所引导分区位于一个使用GPT分区方案的磁盘中 ***** ...
最新文章
- centos6.5安装remmina rdp
- H3C 基于IP的限速
- 七. jenkins部署springboot项目(4)-linux环境--远程调试
- MEMCACHE分布式算法(PHP)
- linux 命令find
- Bzoj4870 [SXOI2017]组合数问题
- 文件上传下载——sz和rz
- 使用dd命令制作ISO镜像U盘启动盘
- 怎么检查计算机和打印机是否连接网络,检查电脑是否正确连接网络打印机
- matlab光学原理仿真应用衍射,基于Matlab的光学衍射实验仿真
- 使用 ffmpeg 转码 视频 (使用 nvidia 硬件加速 和 h265 编码)
- 如何轻松搭建Java安卓开发环境
- Red Hat Enterprise Linux 8.8 正式版
- Clamav安装及基本使用教程
- try to re connect to a new server ,server is not appointed,will choose a random server
- 最新ModownVer6.1去授权+全套插件/Wordpress主题内核
- GPS从入门到放弃(十一)、差分GPS
- Java集合扩展系列 | 字典树
- 【接口测试之自动化】接口测试工具
- VMWARE 16 宿主虚拟机 Deepin 20.4 本地系统盘扩充方法