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

面试题13. 机器人的运动范围

面试题13. 机器人的运动范围

难度:middle\color{orange}{middle}middle


题目描述

地上有一个 mmmnnn 列的方格,从坐标 [0,0][0,0][0,0] 到坐标 [m−1,n−1][m-1,n-1][m1,n1] 。一个机器人从坐标 [0,0][0, 0][0,0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于 kkk 的格子。例如,当 kkk18 时,机器人能够进入方格 [35, 37] ,因为 3+5+3+7=18 。但它不能进入方格 [35, 38],因为 3+5+3+8=19。请问该机器人能够到达多少个格子?

示例 1:

输入:m = 2, n = 3, k = 1
输出:3

示例 2:

输入:m = 3, n = 1, k = 0
输出:1

提示:

  • 1<=n,m<=1001 <= n,m <= 1001<=n,m<=100
  • 0<=k<=200 <= k <= 200<=k<=20

算法

(BFS)

这是一个典型的宽度优先搜索问题,我们从 (0, 0) 点开始,每次朝上下左右四个方向扩展新的节点即可。

扩展时需要注意新的节点需要满足如下条件:

  • 之前没有遍历过,这个可以用一个 bool 数组来判断;
  • 没有走出边界;
  • 横纵坐标的各位数字之和小于 k

最后答案就是所有遍历过的合法的节点个数。

复杂度分析

  • 时间复杂度:每个节点最多只会入队一次,所以时间复杂度不会超过方格中的节点个数。最坏情况下会遍历方格中的所有点,所以时间复杂度就是 O(nm)O(nm)O(nm)

  • 空间复杂度 : O(n)O(n)O(n)

C++ 代码

class Solution {
public:// 求单个数字的各个位数之和int get_single_num(int x) {int s = 0;while (x) {s += x % 10;x /= 10;}return s;}//求一个方格的坐标位数之和int get_sum(pair<int, int> p) {return get_single_num(p.first) + get_single_num(p.second);}int movingCount(int m, int n, int k) {//m 行 n 列 threshhold -> kif (!k) return 1;if (!m || !n) return 0;int res = 0;vector<vector<bool>> st(m, vector<bool>(n));queue<pair<int, int>> q;q.push({0, 0});int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};while (q.size()) {auto t = q.front();q.pop();if (get_sum(t) > k || st[t.first][t.second]) continue;res ++;st[t.first][t.second] = true;for (int i = 0; i < 4; i ++) {int x = t.first + dx[i], y = t.second + dy[i];if (x >= 0 && x < m && y >= 0 && y < n)q.push({x, y});}}return res;}
};

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

相关文章:

  • LeetCode189_189. 轮转数组
  • java Files和Paths的使用详解 附有使用demo
  • 如何使用ApacheTomcatScanner扫描Apache Tomcat服务器漏洞
  • js中的定时器 setTimeout()和setInterval()
  • 【吃透Js】深入学习浅拷贝和深拷贝
  • AUTOSAR为啥要开发新的社区商业模式?
  • 数据结构和算法面试常见题必考以及前端面试题
  • 一文解决Python所有报错
  • LeetCode 1237. Find Positive Integer Solution for a Given Equation【双指针,二分,交互】
  • 【C语言】结构体进阶
  • 全志T3+FPGA国产核心板——Pango Design Suite的FPGA程序加载固化
  • 深度学习之 imgaug (图像增强)学习笔记
  • mysql字符串等值查询中条件字段值末尾有空格也能查到数据问题
  • 一个关于事件溯源Event Sourcing的小荔枝,Golang实现
  • Vue3 组合式函数,实现minxins
  • 什么是钉钉消息推送?
  • 利用 NVIDIATAO 和 WeightBias 加速AI开发
  • token - 令牌
  • 应用模型开发指南上新介绍
  • Dbeaver连接Hive数据库操作指导
  • 【RabbitMQ笔记09】消息队列RabbitMQ之常见方法的使用
  • Linux字符设备驱动模型之设备号
  • C++多态原理
  • PMP认证与NPDP认证哪个含金量高?
  • 改进YOLOv7-Tiny系列:首发改进结合BiFPN结构的特征融合网络,网络融合更多有效特征,高效涨点
  • PPC Insights系列:洞见安全多方图联邦
  • SQLite注入记录(目前最全、核心函数用法、布尔盲注、时间盲注、webshell、动态库,绕过方式)
  • Java简单的生成/解析二维码(zxing qrcode)
  • 若依项目导出后端响应的Excel文件流处理
  • 华为OD机试【独家】提供C语言题解 - 数组排序