剑指offer第11题:机器人运动范围
时间:2022-07-22
本文章向大家介绍剑指offer第11题:机器人运动范围,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
机器人运动范围
剑指Offer 13:机器人的运动范围 【中等】”
题目描述
方法:
此方法我们可以直接按照题目中的要求,将所有的方格全都访问一遍,由于所有的格子需要满足一个条件,连续性和单元格的坐标和小于n即可。
我们使用==递归==的方式进行完成。首先我们自己来初始化一个boolen[][]
矩阵,用来标记每一个方格是否可达。如果当前方格(i,j)
可达,我们继续向下和向右遍历,如果当前方格(i,j)
不可达,那么我们则不再需要继续向后递归。
当我们完成整个方格的标记之后,我们遍历存放可达的boolean
矩阵,然后进行统计可达的个数就好了~
代码实现:
class Solution {
public int movingCount(int m, int n, int k) {
boolean[][] flag = new boolean[m][n];//记录访问了哪些格子
extend(flag , 0 , 0 , m , n , k);
int res = 0;
for(int i = 0 ; i < m ; i++){
for(int j = 0 ; j < n ; j++){
if(!flag[i][j]) continue;//如果当前的格子已经遍历过了,则不再进行遍历了
res++;
}
}
return res;
}
private void extend (boolean[][] flag , int row , int col , int m , int n , int k){
//判断当前格子是否已经超出范围并且确保没有被访问过
if(row < 0 || row >= m || col < 0 || col >= n || flag[row][col]) return;
int sum = 0 ;
int i = row , j = col ;
while(row > 0 || col > 0){
sum += row%10 + col%10;
row /= 10;
col /= 10;
}
if(sum > k) return; //判断是否可达
flag[i][j] = true;
//我们规定机器人都是从左上角开始移动的,所以我们只需要让机器人向右或者向下即可
extend(flag , i+1 , j , m , n , k);//向下
extend(flag , i , j+1 , m , n , k);//向右
}
}
【思考】
此题的解题思路是比较明显的,就是递归思想,在很多题解里面所说的DFS
其实本质上也是一种递归的表现形式,首先弄清楚何时递归,何时不可递归,以及每次递归时我们需要的处理即可。大致可以从这道题目中略见一二。
- 转--Golang语言 rpc 简单范例
- Golang语言 之网络
- Golang语言作为服务器,H5作为前端的视频传输
- Pandas——高效的数据处理Python库
- Oracle中的段(r10笔记第81天)
- 转-- Golang中timer定时器实现原理
- Golang语言 -并行程序
- 深度学习中的优化问题以及常用优化算法
- GoldenGate简单复制环境的搭建(r10笔记第79天)
- 在Golang语言中统计程序执行时间
- 经典面试问题: Top K 之 ---- 海量数据找出现次数最多或,不重复的。
- 每天一个Linux命令(2):cd命令
- Golang语言为类型添加方法
- 浅谈 Glide - BitmapPool 的存储时机 & 解答 ViewTarget 在同一View显示不同的图片时,总用同一个 Bitmap 引用的原因
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 详解PROTOCOL BUFFERS
- Spring boot常用注解收集
- Go依赖模块版本之Module避坑使用详解
- 【tcl学习】vivado write_edif
- K8s中优雅停机和零宕机部署
- Python读取.edf格式脑电数据文件
- Kotlin修炼指南(三)——奇技淫巧
- 前端|CSS盒阴影和文字阴影
- 一文读懂Spring Boot各模块组件依赖关系
- 谈一谈|MkDocs介绍及应用
- 讲得最明白的Elasticsearch源码调试环境搭建教程
- 史上最全ThreadPoolExecutor梳理(下篇)
- JAVA|多Realm管理基础实现
- 史上最全ThreadPoolExecutor梳理(上篇)
- 使用缓存必须注意的事项