剑指offer66:机器人的运动范围
1 题目描述
2 思路和方法
回溯法:
是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
第一步:创建一个行为rows,列为cols的bool型数组,用来标记走过的位置,初始化为false,true表示走过。
第二步:函数sum (int row, int col)用来计算第i位,第j位的数位之和。
第三步:检查能否进入坐标为(row, col)的方格
第四步:getSum(row,col) <= threshold && !visited[row*cols+col]表示可以走。
第五步:满足第四步的判断,将此格子在flag中标记为true,标记走过了。
第六步:递归这个位置的上、下、左、右,返回递归的上、下、左、右再加1(加上自己)的和。
第七步:在movingCount函数中调用movingCountCore
函数,初始的位置即i=0,j=0,让其递归出的结果直接返回。
3 C++核心代码
class Solution {
public:
int movingCount(int threshold, int rows, int cols)
{
if(threshold <= || rows < || cols<)
return ; bool *visited = new bool[rows * cols];
memset(visited,,rows * cols); int count = movingCountCore(threshold,rows,cols,,,visited); delete[] visited; return count;
} int movingCountCore(int threshold,int rows, int cols, int row, int col, bool* visited)
{
int count = ;
// 检查能否进入坐标为(row, col)的方格
if(row>= && row < rows && col>= && col<cols && getSum(row,col) <= threshold && !visited[row*cols+col])
{
visited[row*cols + col] = true;
count = + movingCountCore(threshold,rows,cols,row-,col,visited)
+ movingCountCore(threshold,rows,cols,row+,col,visited)
+ movingCountCore(threshold,rows,cols,row,col-,visited)
+ movingCountCore(threshold,rows,cols,row,col+,visited);
}
return count;
} // 得到数位和
int getSum(int row, int col)
{
int sum = ;
while(row>){
sum += row%;
row /= ;
}
while(col>){
sum += col%;
col /= ;
}
return sum;
}
};
参考资料
https://blog.csdn.net/zjwreal/article/details/89296096,https://blog.csdn.net/u012477435/article/details/83351659#_1782
https://blog.csdn.net/qq_43109561/article/details/89670163
https://blog.csdn.net/Mr_XiaoZ/article/details/81174055?utm_source=blogxgwz1
剑指offer66:机器人的运动范围的更多相关文章
- 剑指offer66:机器人的活动范围
地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能够进入方格 ...
- 剑指Offer——机器人的运动范围
题目描述: 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人 ...
- 剑指offer--48.机器人的运动范围
这道题不是要求走一趟最多走多少,而是最多走多少,WA几次才想通. ------------------------------------------------------------------- ...
- 剑指Offer66题的总结、目录
原文链接 剑指Offer每日6题系列终于在今天全部完成了,从2017年12月27日到2018年2月27日,历时两个月的写作,其中绝大部分的时间不是花在做题上,而是花在写作上,这个系列不适合大神,大牛, ...
- 机器人的运动范围 剑指offer66题
include "stdafx.h" #include<vector> #include<algorithm> #include<string> ...
- 剑指offer——2
剑指offer 机器人的运动范围 数组的应用和递归 package com.wang.test; public class Myso { /** * 题目描述 * 地上有一个m行和n列的方格.一个机器 ...
- 【Java】 剑指offer(12) 机器人的运动范围
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移 ...
- 剑指 Offer 13. 机器人的运动范围 + 深搜 + 递归
剑指 Offer 13. 机器人的运动范围 题目链接 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2020/12/ ...
- 剑指 Offer 13. 机器人的运动范围
剑指 Offer 13. 机器人的运动范围 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] .一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左.右.上.下移动一 ...
随机推荐
- 谈谈你对This对象的理解?
1.this总是指向函数的直接调用者(而非间接调用者):2.如果有new关键字,this指向new出来的那个对象:3.在事件中,this指向触发这个事件的对象,特殊的是,IE中的attachEvent ...
- JVM 字节码的结构
编译的.class文件,可以用javap进行反编译 javap Test.class javap -c Test.class javap -verbose Test.class 1.创建MyTest1 ...
- 基础学习笔记之opencv(3):haartraining生成.xml文件过程[转]
1.准备正负样本: 在上一讲http://www.cnblogs.com/tornadomeet/archive/2012/03/27/2420088.html 中,我们已经收集到了训练所用的正样本. ...
- shell脚本 获取第几行 第几列 的命令 awk sed
例如:我们需要查看 包含 sbin的进程 中的PID号 查看当前所有包含sbin的进程 [root@fea3 ~]# ps aux | grep sbin 只过滤出所有的PID号: [root@fea ...
- linux系统中如何查看acpi信息?
答: 进入/sys/firmware/acpi/tables, 然后输入tree命令即可查看acpi信息
- ActionBar 自定义布局定义
ActionBar 自定义布局定义 Android系统中ActionBar默认的布局不美观且难于控制,通过为ActionBar自定义布局的方式可以灵活控制ActionBar. 效果: 工具/原料 ...
- VPB编译日志2
1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Debug x64 ------1> Checking Build System1> CMake do ...
- ES6深入浅出-13 Proxy 与 Reflect-1.Reflect 反射
阮一峰 http://es6.ruanyifeng.com/#docs/reflect MDN有一些简陋的介绍 https://developer.mozilla.org/zh-CN/docs/We ...
- Python 初级 5 判断再判断(四)
一 .复习 分支:完成测试并根据结果做出判断称为分支. 代码块:一行或放在一起的多行代码 缩进:一个代码行稍稍靠右一点 关系操作符(比较操作符):==, >, >=, <, < ...
- online学习和offline学习
参考:https://blog.csdn.net/a133521741/article/details/79221015 解释: (1)offline学习:每次训练完一个batch后再更新参数: (2 ...