题目:机器人的运动范围

地上有一个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. 机器人的运动范围相关推荐

  1. 剑指Offer - 面试题13. 机器人的运动范围(BFS/DFS)

    文章目录 1. 题目 2. 解题 2.1 BFS 2.2 DFS 1. 题目 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动 ...

  2. 【有返回值的回溯】剑指offer——面试题67——机器人的运动范围(回溯法)

    剑指offer--面试题67:机器人的运动范围(回溯法) Solution1: 此题和66题均是典型的回溯法题目,对比记忆思路! class Solution {public:int movingCo ...

  3. 剑指offer面试题13:O(1)删除链表结点

    面试题见剑指offer: struct ListNode { int value; ListNode *next; }; void DeleteNode(ListNode **pListHead,Li ...

  4. [剑指offer]面试题13:在O(1)时间删除链表结点

    面试题13:在O(1)时间删除链表结点 题目:给定单向链表的头指针和一个结点指针,定义一个函数在 O(1)时间删除该结点.链表结点与函数的定义如下: struct ListNode {int valu ...

  5. 剑指offer面试题13:机器人的运动范围

    题目描述:地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上.下移动一格(不能移动到方格外),也不能进入 ...

  6. 剑指offer面试题13扩展------Linus:利用二级指针删除单向链表

    Torvalds大婶:很多人不了解如何写核心底层代码 Torvalds大婶在slashdot上回答一些编程爱好者的提问,其中一个人问他什么样的代码是他所喜好的,大婶表述了自己一些观点之后,举了一个指针 ...

  7. 剑指offer 面试题三 找出数组中重复的数字

    1 import org.junit.Test; 2 3 import java.util.Arrays; 4 import java.util.HashSet; 5 6 public class D ...

  8. 剑指offer——面试题44:扑克牌顺子

    剑指offer--面试题44:扑克牌顺子 Solution1: 20180907重做 书上的思路. class Solution { public:bool IsContinuous(vector&l ...

  9. C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解

    剑指offer 面试题39:判断平衡二叉树 提交网址:  http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...

  10. 【剑指Offer面试题】 九度OJ1510:替换空格

    c/c++ 中的字符串以"\0"作为结尾符.这样每一个字符串都有一个额外字符的开销. 以下代码将造成内存越界. char str[10]; strcpy(str, "01 ...

最新文章

  1. 5.9、离散卷积的一般描述
  2. 这个图形的体积有限,但表面积却是无穷大
  3. 【通信原理】【实验】实验二:数字基带传输实验(GZHU)
  4. 每天一道LeetCode-----找到有多少条连续路径的和为给定值,路径不需要从根节点出发到达叶子节点
  5. MongoDB学习笔记~管道中的分组实现group+distinct
  6. JS Event handler example - event capture and bubble
  7. oracle中sql语句的优化(转帖)
  8. 人工智能的时代来了,新的商业机会在哪里?
  9. sigar-amd64-linux.so,sigar,no libsigar-amd64-linux.so in java.library.path
  10. IRP请求的完成与返回
  11. 【脑电信号】基于matlab HMM睡眠状态检测【含Matlab源码 050期】
  12. 操作系统课程设计-模拟操作系统
  13. 从苏宁电器到卡巴斯基(后传)第04篇:还愿吾爱破解视频教程大赛
  14. 黑色商务中国风禅茶一味产品宣传介绍PPT模板
  15. 黑客是什么?揭开郭盛华的神秘面纱,讲解他不为人知传奇故事
  16. 无人驾驶小车调试笔记(三)--小车启动及初始化设置
  17. 我爸是李刚 java_深入理解java继承从“我爸是李刚”讲起
  18. IAR下连仿真器可以正常运行,程序下载到flash部分功能异常
  19. FTP文件传输协议导图
  20. NUC970(ARM9)裸机SPI驱动

热门文章

  1. sklearn.model_selection.train_test_split随机划分训练集和测试集
  2. Java Date类
  3. Go 学习笔记(42)— Go 标准库之 os/user(获取Uid、Gid、Username、Name、HomeDir、查询用户、查询用户组)
  4. ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'name' at row 1
  5. ubuntu下安装 python 常用软件
  6. 第三周 9.13-9.19
  7. abb机器人指令手册_ABB机器人可以告别示教器啦
  8. ssm radis mysql_从零开始搭建框架SSM+Redis+Mysql(一)之摘要
  9. rust矿洞绳子怎么爬下_车底下绑一根绳子妙用在哪?看看老司机怎么说!
  10. 创建一个水平盒子java_盒子模型理解