剑指offer(66)机器人的运动范围
题目描述
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
题目分析
这道题和之前的矩阵中的路径一样都是用回溯法,掌握回溯法后就会觉得比较简单。
回溯法和暴力法有点类似,不过他会用数组或变量去记录已经遍历过的解,避免重复遍历,从而减少了计算量。
代码
function movingCount(threshold, rows, cols) {
const visited = [];
for (let i = 0; i < rows; i++) {
visited.push([]);
for (let j = 0; j < cols; j++) {
visited[i][j] = false;
}
}
return move(0, 0, rows, cols, visited, threshold);
}
function move(i, j, rows, cols, visited, threshold) {
if (i < 0 || i === rows || j < 0 || j === cols || visited[i][j]) {
return 0;
}
let sum = 0;
const tmp = `${i}${j}`;
for (let k = 0; k < tmp.length; k++) {
sum += tmp.charAt(k) / 1; // 转成数字
}
if (sum > threshold) {
return 0;
}
visited[i][j] = true;
return (
1 +
move(i + 1, j, rows, cols, visited, threshold) +
move(i, j + 1, rows, cols, visited, threshold) +
move(i - 1, j, rows, cols, visited, threshold) +
move(i, j - 1, rows, cols, visited, threshold)
);
}
剑指offer(66)机器人的运动范围的更多相关文章
- 剑指Offer 66. 机器人的运动范围 (回溯)
题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能 ...
- [剑指Offer] 66.机器人的运动范围
题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能 ...
- 剑指 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] 的格子开始移动,它每次可以向左.右.上.下移动一 ...
- 【Java】 剑指offer(12) 机器人的运动范围
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移 ...
- Go语言实现:【剑指offer】机器人的运动范围
该题目来源于牛客网<剑指offer>专题. 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之 ...
- 剑指offer:机器人的运动范围(回溯法DFS)
题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能 ...
- 剑指offer——14机器人的运动范围
题目描述 地上有一个m行和n列的方格.一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子. 例如,当k为18时,机器人能 ...
- 剑指offer 66. 构建乘积数组(Leetcode 238. Product of Array Except Self)
剑指offer 66. 构建乘积数组 题目: 给定一个数组A[0, 1, ..., n-1],请构建一个数组B[0, 1, ..., n-1],其中B中的元素B[i] = A[0] * A[1] * ...
- 剑指 Offer 66. 构建乘积数组 + 思维
剑指 Offer 66. 构建乘积数组 Offer_66 题目描述 题解分析 java代码 package com.walegarrett.offer; /** * @Author WaleGarre ...
随机推荐
- Linux基础命令1
文件的操作: Tab键:自动补齐 反斜杠‘\’:强制换行 Ctrl+u:清空至行首 Ctrl+k:清空至行尾 Ctrl+l:清屏 --clear 清屏 Ctrl+c:取消本次命令编辑,中断当前操作 ...
- less命令查看文件时的常用操作
下键或者回车:往下一行 D:往下半页 空格和f:往下一页 上键:往上一行 B:往上一页 shift+G:直接切到末尾 ?+搜索条件:从下往上搜索 /+搜索条件:从上往下搜索
- 报错处理——# Creating Server TCP listening socket *:6379: bind: Address already in use
在启动redis时报错 # Creating Server TCP listening socket *:6379: bind: Address already in use 错误原因 6379地址已 ...
- 将分支推送到远程存储库时遇到错误: Git failed with a fatal error. TaskCanceledException encountered.
解决:https://blog.csdn.net/dw33xn/article/details/79951714 修改下配置文件即可
- 使用LVM进行分区扩展的记录
场景:在磁盘分区空间不够的情况下,要扩展分区空间 因为使用的是虚拟机,所以可以对原有的硬盘上进行扩展,而不需要新增一个硬盘 1.扩展磁盘并使用fdisk工具进行分区 虚拟机关机后对磁盘进行扩展,扩展到 ...
- PHP多线程 curl_multi_init 的使用
php中可以通过CURL处理HTTP请求,其中curl_init()是单线程模式,如果需要对事务处理走多线程模式,那么就需要用到curl_multi_init()函数. 本案例用来测试大并发的情况下 ...
- table-cell width:1% 深入理解
问题描述 今天在使用Bootstrap给页面添加底部导航栏时,需要在手机下也使导航栏呈现水平排列的效果.最后在网上查找解决方法是,看到这样一个解决方法: .nav-justified > li ...
- jq点击事件不生效,效果只闪现一次又立马消失的原因?
出现的问题:jq点击事件不生效,点击的时候效果实现但又立马消失,页面重新刷新了一次 可能出现的原因: a标签href属性的原因,虽然点击事件生效,但页面又刷新了一次,所以没有效果,只闪了一次 解决方案 ...
- egg.js异步请求数据
之前已经简单的使用egg-init初始化项目,并创建控制器controller和服务service 在实际项目中, service主要负责数据的请求,并处理(http请求) controll主要负责获 ...
- Debian install Python3.7
Download the package. Then... tar -xvzf Python-3.7.0.tgz 进入目录: cd Python-3.7.0/ 添加配置: ./configure -- ...