如题:

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标
和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入
方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?

这道题和第12题矩阵中的路径类似,都是在二维数组中移动,采用的方法也都是回溯法。机器人从地上的方格中移动,如果方格坐标数位之和超过阈值,则不能走动,否则可以走,方向包括上下左右四个方向。可以画个二维数组,从00点开始模拟走下试试。我们从00点出发,如果00点可走,则下一步有四个方向,分别是上下左右,调用递归四次,累加每个方向可以走动的个数。在每次走之前,需要检查坐标是否超出边界,该点是否可以走以及是否已经走过。因此,我们额外申请一个二维数组保存方格,初始化 的时候,对于每一个不能走的点置-1,对于已经走过的点置1,可走的点置0。流程比较简单,编码的时候别忘了非法参数的处理。

下面是本题c++编码:

class Solution {
public://获取数位之和int getBitSum(int val){int ret = 0;while (val){ret += val % 10;val /= 10;           }return ret;}//检查是否可走int checkThreshold(int threshold, int row, int col){int sum = getBitSum(row) + getBitSum(col);return sum > threshold ? -1 : 0;}int movingCount(vector<vector<int>> &array, int row, int col, int prow,int pcol){int cnt = 0;//检查边界if (prow < 0 || prow >= row || pcol < 0 || pcol >= col)return 0;    //检查是否可走if (array[prow][pcol] != 0)return 0;//可以走的话,置上标志位cnt = array[prow][pcol] = 1;//cout<<"["<<prow<<"]["<<pcol<<"]"<<endl;//上、右、下、左cnt += movingCount(array, row, col, prow-1, pcol) + movingCount(array, row, col, prow, pcol+1) + movingCount(array, row, col, prow+1, pcol) + movingCount(array, row, col, prow, pcol-1);return cnt;}int movingCount(int threshold, int rows, int cols){vector<vector<int>> array(rows, vector<int>(cols, 0)), &rArray = array;//特殊情况处理if (threshold < 0 || (rows < 1 && cols < 1))return 0;//初始化方格for (int i = 0; i < rows; i++){for (int j = 0; j < cols; j++){array[i][j] = checkThreshold(threshold, i, j);}}//返回可到达个数return movingCount(rArray, rows, cols, 0, 0);}
};

=============================================================================================

Linux应用程序、内核、驱动、后台开发交流讨论群(745510310),感兴趣的同学可以加群讨论、交流、资料查找等,前进的道路上,你不是一个人奥^_^。

《剑指offer》c++版本 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最新版_剑指Offer——Java版本(持续更新)

    0 前言 邻近校招,算法要命!!! 本文为研究剑指Offer过程中的笔记,整理出主要思路以及Java版本题解,以便记忆和复习. 参考整理来自<剑指Offer 第二版>. 特别注意,对每道题 ...

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

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

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

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

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

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

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

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

  8. 【Java】剑指Offer_编程题_机器人的运动范围

    题目链接:https://www.nowcoder.com/questionTerminal/6e5207314b5241fb83f2329e89fdecc8 题目描述 地上有一个m行和n列的方格.一 ...

  9. 《剑指 Offer》题目汇总

    文章目录 1. 数组 2. 链表 3. 栈和队列 4. 哈希表 5. 字符串 6. 树 7. 堆 8. 回溯和深度优先搜索 9. 递归和循环 10. 双指针 11. 动态规划 12. 贪心算法 13. ...

最新文章

  1. 访谈实录:网管员如何踏上高薪之路(1)
  2. 使用大脑活动反馈的刺激技术自动化治疗脑部疾病
  3. 18 个 Java8 日期处理的实践,太有用了!
  4. Javascript 笔记(1)----函数
  5. python3 最简单的实现 模版设计模式
  6. mysql 查询某个字段SQL语句【mysql语句】
  7. (101)FPGA面试题-Verilog设计偶校验位
  8. linux contos升级内核,CentOS7升级内核方法
  9. 白话搭建一个简单的微服系统
  10. Git 如何拉取 github 上的代码
  11. 001_chrome工具详解
  12. bmFont的使用方法
  13. 在CSDN的博文中如何添加博主名片
  14. 黑灰产套现城市消费券大揭秘
  15. 数据结构(C语言版 严蔚敏著)——树
  16. 我准备报名上海芭蕾舞学校了
  17. 英语caement单词caement水泥
  18. 2018最新安卓面试大全(含BAT,网易,滴滴)----你面不上BAT的原因:面经宝典,都在这里啦
  19. 计算机安装重装出现错误,如何解决重装系统失败无法开机进入系统的问题
  20. 头条系 巨量算数 _signature

热门文章

  1. 解决ECSHOP后台订单里面点击编辑配送方式时出现的警告问题
  2. Spring.NET企业架构实践之 JQuery + FlexiGrid + ASP.NET MVC + NVelocity + WCF + LINQ + NHibernate 综合应用...
  3. sketch生成android代码,java – 从Android Processing Sketch保存图像
  4. php access control allow origin,js请求跨域问题--Access-Control-Allow-Origin
  5. Chevereto图片托管php源码_亲测-分享最新微信付费进群收费进群系统源码-附带搭建教...
  6. 【控制】《复杂运动体系统的分布式协同控制与优化》-方浩老师-第9章-固定翼飞行器的编队跟踪与队形旋转控制
  7. P10 线性系统状态空间设计-《Matlab/Simulink与控制系统仿真》程序指令总结
  8. 2.4 使用来自不同分布的数据,进行训练和测试-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  9. 2.10 局部最优的问题-深度学习第二课《改善深层神经网络》-Stanford吴恩达教授
  10. IQmath中文手册