剑指Offer——机器人的运动范围(JS实现)

简介: 剑指Offer——机器人的运动范围(JS实现)

题目描述

image.png

解题思路(序列化)

  • 看到本题我首先想到的是两层嵌套循环,计算下标和与k的关系不就行了,果然不会那么简单,因为有的元素,虽然下标和符合条件,但是却不符合条件,原因是一个格子被访问到,周围必须得有其他被访问到的格子,以m = 15,n = 15 ,k = 2为例,虽然(10,10)的下标符合但是它不能被访问到。
  • 这里采用队列 + 方向数组的方法来遍历所有符合条件的元素
  • 本题还需要计算一个数位和,这里采用的是通过转换为字符串,再将字符串转化为数字的形式来进行计算
  • 同时本题还要考虑边界条件
  • 下面的注释很清晰,看懂了就理解了这道题目

序列化代码

var movingCount = function (m, n, k) {
    // 首先计算数位和
    function getSum(x, y) {
        const temp1 = String(x).split('');
        const temp2 = String(y).split('');
        const sumArr = [...temp1, ...temp2];
        const sums = sumArr.reduce((pre, cur) => pre + Number(cur), 0);
        return sums;
    }
    // 定义方向数组
    const directionArr = [
        // 向上
        [-1,0],
        // 向下
        [1,0],
        // 向左
        [0,-1],
        // 向右
        [0,1]
    ];
    // 走过的坐标,不在重复计算,通过Set数据结构来实现
    let set = new Set(['0,0']);
    // 定义一个队列,这个队列存放的是下一个符合条件的,机器人可以走的坐标
    const queue = [[0,0]];
    // 当队列中没有元素的时候,说明符合条件的全都走一遍了,且都存储在集合中了,此时集合中的数量就是最终需要返回的结果
    while (queue.length !== 0) {
        // 获取队头元素的上下左右的元素
        let [x,y] = queue.shift();
        for (let i = 0; i < 4; i++) {
            let offsetX = directionArr[i][0] + x;
            let offsetY = directionArr[i][1] + y;
            // 判断边界条件和是否已经走过
            if (offsetX < 0 || offsetY < 0 || offsetX >= m || offsetY >= n || getSum(offsetX,offsetY) > k || set.has(`${offsetX},${offsetY}`)) {
                continue;
            }
            set.add(`${offsetX},${offsetY}`);
            queue.push([offsetX,offsetY]);
        }
    }
    return set.size;
};

总结(本题给我们的启示思路)

  • 启示一:学会使用方向数组,遍历一个元素的上下左右
  • 启示二:学会使用队列 + 方向数组的方式
  • 启示三:学会通过字符串和数字的转换来求数位和
  • 启示四:集合初始化时添加字符串的方式,是通过数组来实现的
相关文章
|
3月前
|
存储 JSON JavaScript
「offer来了」保姆级巩固你的js知识体系(4.0w字)
该文章提供了JavaScript知识体系的全面复习资料,覆盖了从基础语法到高级特性如闭包、原型链、异步编程等多个方面,并通过大量的面试题和实例代码帮助巩固理解。
「offer来了」保姆级巩固你的js知识体系(4.0w字)
|
4月前
|
数据可视化 机器人 Python
实例9:四足机器人运动学正解平面RR单腿可视化
本文是关于四足机器人正向运动学(FK)的实例教程,通过Python编程实现了简化的mini pupper平面二连杆模型的腿部可视化,并根据用户输入的关节角计算出每个关节相对于基坐标系的坐标。
80 1
|
4月前
|
机器人
PUN ☀️六、机器人基础设置:运动、相机、攻击与生命值
PUN ☀️六、机器人基础设置:运动、相机、攻击与生命值
|
4月前
|
数据可视化 算法 机器人
实例10:四足机器人运动学逆解可视化与实践
本文是关于四足机器人逆运动学(IK)的实例教程,介绍了逆运动学的概念、求解方法、多解情况和工作空间,并通过Python编程实现了简化的mini pupper平面二连杆模型的逆运动学可视化,包括单腿舵机的校准和动态可视化运动学计算结果。
225 0
|
7月前
|
NoSQL 机器人 Windows
ROS机器人编程技术控制两只小海龟的编队运动
ROS机器人编程技术控制两只小海龟的编队运动
259 1
|
7月前
|
机器人 Python
Moveit + Gazebo实现联合仿真:ABB yumi双臂机器人( 二、双臂协同运动实现 )
Moveit + Gazebo实现联合仿真:ABB yumi双臂机器人( 二、双臂协同运动实现 )
|
7月前
|
JavaScript 前端开发
剑指 Offer 31. 栈的压入、弹出序列 (javascript实现)
剑指 Offer 31. 栈的压入、弹出序列 (javascript实现)
|
7月前
|
机器学习/深度学习 人工智能 机器人
[译][AI 机器人] Atlas的电动新时代,不再局限于人类运动范围的动作方式
波士顿动力宣布液压Atlas机器人退役,推出全新电动Atlas,旨在实现更广泛的实际应用。这款全电动机器人将拓展人类运动范围,解决复杂工业挑战。现代汽车公司将参与其商业化进程,作为测试应用场景。波士顿动力计划与创新客户合作,逐步迭代Atlas的应用,打造高效、实用的移动机器人解决方案。Atlas将结合强化学习和计算机视觉等先进技术,通过Orbit软件平台进行管理,未来将在真实世界中发挥超越人类能力的作用。
|
28天前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
25 1
JavaScript中的原型 保姆级文章一文搞懂
|
5月前
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp的客户关系管理系统附带文章源码部署视频讲解等
103 2