剑指offer:面试题13. 机器人的运动范围
题目:机器人的运动范围
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?
示例 1:
输入:m = 2, n = 3, k = 1
输出:3
示例 2:
输入:m = 3, n = 1, k = 0
输出:1
提示:
1 <= n,m <= 100
0 <= k <= 20
解题:
- 本题使用的方法同样还是回溯法,另外还需要会计算给定整数上的各个位上数之和。
- 使用一个访问数组记录是否已经经过该格子。
- 机器人从(0,0)开始移动,当它准备进入(i,j)的格子时,通过检查坐标的数位来判断机器人是否能够进入。
- 如果机器人能进入(i,j)的格子,接着在判断它是否能进入四个相邻的格子(i,j-1),(i,j+1),(i-1,j),(i+1,j)。
- 因此,可以用回溯法来解决这一问题。
public class Solution {//回溯法public int movingCount(int threshold, int rows, int cols) {if(rows<=0||cols<=0||threshold<0) return 0;int[] visited=new int[rows*cols];return MovingCount(threshold,rows,cols,0,0,visited);}private int MovingCount(int threshold,int rows,int cols,int row,int col,int[] visited){int count=0;if(canWalkInto(threshold, rows, cols, row, col, visited)){visited[row*cols+col]=1;count=1+MovingCount(threshold,rows,cols,row-1,col,visited) //往上+MovingCount(threshold,rows,cols,row+1,col,visited) //往下+MovingCount(threshold, rows, cols, row, col-1, visited) //往左+MovingCount(threshold, rows, cols, row, col+1, visited); //往右}return count;}private boolean canWalkInto(int threshold,int rows,int cols,int row,int col,int[] visited){if(row>=0 && row<rows && col>=0 && col<cols&& getSumOfDigits(row)+getSumOfDigits(col)<=threshold&& visited[row*cols+col]==0)return true;elsereturn false;}private int getSumOfDigits(int number){int sum=0;while(number!=0){sum+=number%10;number/=10;}return sum;}
}
剑指offer:面试题13. 机器人的运动范围相关推荐
- 剑指Offer - 面试题13. 机器人的运动范围(BFS/DFS)
文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动 ...
- 【有返回值的回溯】剑指offer——面试题67——机器人的运动范围(回溯法)
剑指offer--面试题67:机器人的运动范围(回溯法) Solution1: 此题和66题均是典型的回溯法题目,对比记忆思路! class Solution {public:int movingCo ...
- 剑指offer面试题13:O(1)删除链表结点
面试题见剑指offer: struct ListNode { int value; ListNode *next; }; void DeleteNode(ListNode **pListHead,Li ...
- [剑指offer]面试题13:在O(1)时间删除链表结点
面试题13:在O(1)时间删除链表结点 题目:给定单向链表的头指针和一个结点指针,定义一个函数在 O(1)时间删除该结点.链表结点与函数的定义如下: struct ListNode {int valu ...
- 剑指offer面试题13:机器人的运动范围
题目描述:地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上.下移动一格(不能移动到方格外),也不能进入 ...
- 剑指offer面试题13扩展------Linus:利用二级指针删除单向链表
Torvalds大婶:很多人不了解如何写核心底层代码 Torvalds大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针 ...
- 剑指offer 面试题三 找出数组中重复的数字
1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...
- 剑指offer——面试题44:扑克牌顺子
剑指offer--面试题44:扑克牌顺子 Solution1: 20180907重做 书上的思路. class Solution { public:bool IsContinuous(vector&l ...
- C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解
剑指offer 面试题39:判断平衡二叉树 提交网址: http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...
- 【剑指Offer面试题】 九度OJ1510:替换空格
c/c++ 中的字符串以"\0"作为结尾符.这样每一个字符串都有一个额外字符的开销. 以下代码将造成内存越界. char str[10]; strcpy(str, "01 ...
最新文章
- 5.9、离散卷积的一般描述
- 这个图形的体积有限,但表面积却是无穷大
- 【通信原理】【实验】实验二:数字基带传输实验(GZHU)
- 每天一道LeetCode-----找到有多少条连续路径的和为给定值,路径不需要从根节点出发到达叶子节点
- MongoDB学习笔记~管道中的分组实现group+distinct
- JS Event handler example - event capture and bubble
- oracle中sql语句的优化(转帖)
- 人工智能的时代来了,新的商业机会在哪里?
- sigar-amd64-linux.so,sigar,no libsigar-amd64-linux.so in java.library.path
- IRP请求的完成与返回
- 【脑电信号】基于matlab HMM睡眠状态检测【含Matlab源码 050期】
- 操作系统课程设计-模拟操作系统
- 从苏宁电器到卡巴斯基(后传)第04篇:还愿吾爱破解视频教程大赛
- 黑色商务中国风禅茶一味产品宣传介绍PPT模板
- 黑客是什么?揭开郭盛华的神秘面纱,讲解他不为人知传奇故事
- 无人驾驶小车调试笔记(三)--小车启动及初始化设置
- 我爸是李刚 java_深入理解java继承从“我爸是李刚”讲起
- IAR下连仿真器可以正常运行,程序下载到flash部分功能异常
- FTP文件传输协议导图
- NUC970(ARM9)裸机SPI驱动
热门文章
- sklearn.model_selection.train_test_split随机划分训练集和测试集
- Java Date类
- Go 学习笔记(42)— Go 标准库之 os/user(获取Uid、Gid、Username、Name、HomeDir、查询用户、查询用户组)
- ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name' at row 1
- ubuntu下安装 python 常用软件
- 第三周 9.13-9.19
- abb机器人指令手册_ABB机器人可以告别示教器啦
- ssm radis mysql_从零开始搭建框架SSM+Redis+Mysql(一)之摘要
- rust矿洞绳子怎么爬下_车底下绑一根绳子妙用在哪?看看老司机怎么说!
- 创建一个水平盒子java_盒子模型理解