当前位置: 首页 > news >正文

【剑指Offer】13.机器人的运动范围

题目

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

数据范围:0≤threshold≤15 ,1≤rows,cols≤100

进阶:空间复杂度 O(nm)  ,时间复杂度 O(nm) 

示例1

输入:1,2,3

返回值:3

示例2

输入:0,1,3

返回值:1

示例3

输入:10,1,100

返回值:29

说明:[0,0],[0,1],[0,2],[0,3],[0,4],[0,5],[0,6],[0,7],[0,8],[0,9],[0,10],[0,11],[0,12],[0,13],[0,14],[0,15],[0,16],[0,17],[0,18],[0,19],[0,20],[0,21],[0,22],[0,23],[0,24],[0,25],[0,26],[0,27],[0,28] 这29种,后面的[0,29],[0,30]以及[0,31]等等是无法到达的

示例4

输入:5,10,10

返回值:21

解答

源代码

import java.util.*;public class Solution {public int movingCount(int threshold, int rows, int cols) {boolean[][] flag = new boolean[rows][cols];return dfs(threshold, rows, cols, 0, 0, flag);}public int dfs(int threshold, int rows, int cols, int i, int j, boolean[][] flag) {if (i < 0 || i >= rows || j < 0 || j >= cols || flag[i][j] || cal(i) + cal(j) > threshold) {return 0;}flag[i][j] = true;return 1 + dfs(threshold, rows, cols, i - 1, j, flag)+ dfs(threshold, rows, cols, i + 1, j, flag)+ dfs(threshold, rows, cols, i, j - 1, flag)+ dfs(threshold, rows, cols, i, j + 1, flag);}public int cal(int number) {int sum = 0;while (number != 0) {sum += number % 10;number /= 10;}return sum;}
}

总结

迷宫问题,回溯就完事,记得做标记避免重复经过方格。

这里要注意求的是机器人的运动“范围”而不是一条最大路径,所以每次应该加上上下左右路径的所有长度,而不是只加上一条最长的路径。

http://www.lryc.cn/news/183355.html

相关文章:

  • 【Qt基础篇】信号和槽
  • .netCore用DispatchProxy实现动态代理
  • 好奇喵 | Tor浏览器——访问.onion网址,揭开Dark Web的神秘面纱
  • Maven 中引用其他项目jar包出现BOOT-INF问题
  • PHP框架面试题
  • 如何清理C盘
  • 计算机网络基础知识
  • Go语言面经进阶10问
  • 大厂真题:【DP】米哈游2023秋招-米小游与魔法少女-奇运
  • 后端面经学习自测(一)
  • win10、win11安装Ubuntu 22.04
  • golang gin框架1——简单案例以及api版本控制
  • Redisson—分布式对象
  • alsa pcm接口之在unix环境的传输方法
  • 小谈设计模式(20)—组合模式
  • sheng的学习笔记-【中文】【吴恩达课后测验】Course 1 - 神经网络和深度学习 - 第三周测验
  • 一文详解动态链表和静态链表的区别
  • [C国演义] 第十三章
  • <二>Qt斗地主游戏开发:过场动画的实现
  • 链式法则(Chain Rule)
  • AUTOSAR COM模块框架梳理
  • 详细介绍区块链之挖矿
  • 华为OD机试真题-路灯照明问题(Java/C++/Go/Python)
  • 嵌入式技术面试基本规则
  • osg实现自定义插件读取自定义格式的模型文件到场景
  • redis进阶
  • (一)正点原子STM32MP135移植——准备
  • Kotlin的关键字 lateinit 和 lazy
  • 阿里云服务器ECS详细介绍_云主机_服务器托管_弹性计算
  • 12、建立健全人员培训体系