一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 总共多少步
所有实现代码均使用JAVA
letcode上的算法题,贴原图
首先来分析一下,网格可以使用二维数组来实现,以下图为例 m = 2,n = 3 ,起点为 1([0][0]),终点为 6([1][2])
{
{1, 2, 3},
{4, 5, 6},
};
由于只能向右或向下走,先列出所有路径
1 -> 2 -> 3 -> 6
1 -> 4 -> 5 -> 6
.
1 -> 2 -> 5 -> 6
第三条比较特殊,从起点1开始走到2的时候,有两条路,可以向右也可以向下。如果数组再大点,那么路径会更多。
这时候分析一下 2 的特征,
2 不是数组一({1,2,3})的最后一位(3是最后一位),所以可以继续向右移,
同理,2 不包含在数组二({4,5,6})中,也可以从2([0][1])移动到5([1][1])。
所以只要判断 2(所有移动后的坐标) 的横坐标是否为 m,纵坐标是否为n就行了,如果不是就右移+左移,移动完之后还不是就继续左移+右移,直到找到终点为止
直接上代码
static int cout = 0;public static void main(String[] args) {int[][] nums = {{1, 1, 1},{1, 1, 1},};getStep(0, 0, nums);System.out.println("总步数为: " + cout);
}private static void getStep(int i, int j, int[][] nums) {if (i == (nums.length - 1) && j == nums[nums.length - 1].length - 1) { //到达终点cout++;}if (i < nums.length - 1) { //下移getStep(i + 1, j, nums); //反复玩自己}if (j < nums[nums.length - 1].length - 1) { //右移getStep(i, j + 1, nums);}
}
这是简单的递归调用。为了测试,数组写死的,也可以写方法根据 m,n 的值动态生成。
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 总共多少步相关推荐
- Leetcode:62题 不同路径(一个机器人位于一个 m x n 网格的左上角 。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角)
题目: 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为&q ...
- 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径, 使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。
#include <iostream> #include <vector> using namespace std;/* 给定一个包含非负整数的 m x n 网格,请找出一条从 ...
- 不同路径(一个机器人位于一个 m x n 网格的左上角)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为"Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为" ...
- 数据库中查询记录时是否每次只能使用一个索引?
在网上看一些文章的时候,发现好几次下面这样的话: 如果经常需要同时对两个字段进行AND查询,那么使用两个单独索引不如建立一个复合索引,因为两个单独索引通常数据库只能使用其中一个,而使用复合索引因为索引 ...
- 一个机器人位于m x n网格的左上角达到网格的右下角,有多少条不同的路径?
一个机器人位于m x n网格的左上角(起始点标记为Start). 机器人每次只能向下或向右移动一步.机器人试图达到网格的右下角(标记为Finish). 有多少条不同的路径? Start 1 1 1 2 ...
- 一个机器人在m×n大小的地图的左上角(起点,下图中的标记“start“的位置)。 机器人每次向下或向右移动。机器人要到达地图的右下角。(终点,下图中的标记“Finish“的位置)。 可以有多少种不同
题目描述 一个机器人在m×n大小的地图的左上角(起点,下图中的标记"start"的位置). 机器人每次向下或向右移动.机器人要到达地图的右下角.(终点,下图中的标记"Fi ...
- 【蓝桥杯】有一张 m×n 个小方格的地图,一个机器人位于地图的左上角,它每步只能向右或者向下移动一格。。。
题目描述 有一张 m×n 个小方格的地图,一个机器人位于地图的左上角(如图标记为 Start 的地方),它每步只能向右或者向下移动一格,如果走到右下角的终点(如图标记为 Finish 的地方),有多少 ...
- 动态规划-机器人位于m x n网格的左上角只能向下向右移动,有多少路径
package com.algorithm.dynamicprogramming;/*** 算法描述:机器人位于m x n网格的左上角(下图中标记为"开始").* 机器人只能在任何 ...
- 安装Linux时,引导分区位于一个GPT分区方案的错误提示
在安装Linux时,如果机器之前装过VMware EXi5系统,在分区时会出现 ************************* 分区错误 您所引导分区位于一个使用GPT分区方案的磁盘中 ***** ...
最新文章
- ObservableCollection 类 详解
- Windows编程之使用外部动态链接库——纸牌
- 敏捷需求分析及深度提升(广州 2014.1.11)
- Maven聚合工程怎么变回普通的Maven工程
- POJ1384Piggy-Bank(DP)
- [蓝桥杯]基础练习 特殊回文数
- Netty权威指南(第2版)
- Total Control通过定义配置文件,预加载脚本教程
- java 右下角_java实现桌面右下角弹窗效果
- linux上电自动开启wifi脚本,archlinux 开机自动连接wifi
- 今天开始学Convex Optimization:第2章 背景数学知识简述
- python若干整数的最大值_python脚本3_输入若干个整数打印出最大值
- 【PhotoShop】用自己的照片做个好看的星空头像PS
- 数据库系统原理学习(三)--PG数据定义与操作
- 从阿里巴巴发行价看A股新股投资机会
- Linux 计算机网络从零到一开始构建 必看
- JuiceFS 在多云存储架构中的应用 | 深势科技分享
- 35岁以前要百万年薪
- (译)java NIO 示例代码
- Hibernate Validation各注解的用法
热门文章
- 计算机网络未来阶段发展趋势,计算机网络的未来发展趋势
- BFC、IFC、GFC、FFC
- FISCO BCOS群组特性
- Modbus 简单认识(楼宇自动化系统背景下的详实总结
- 8.Spring Boot中使用thymeleaf
- 怎么查看计算机的dns地址,如何查看windows10电脑DNS地址?查看win10电脑DNS地址的两种方法...
- BUUCTF-刷题记录-3
- 在Pycharm set ops_config=local之后,直接echo %ops_config%能找到ops_config,但是输入print(os.environ)里边没有ops_config
- KANKAN AI不良信息过滤技术:用数据证明自己是最好的
- 程序员去美国工作:2015年H1B抽签结果与分析