剑指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;
};

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

  • 启示一:学会使用方向数组,遍历一个元素的上下左右
  • 启示二:学会使用队列 + 方向数组的方式
  • 启示三:学会通过字符串和数字的转换来求数位和
  • 启示四:集合初始化时添加字符串的方式,是通过数组来实现的
相关文章
|
5月前
|
算法 机器人 Python
机器人逆运动学进阶:李代数、矩阵指数与旋转流形计算
本文深入讲解机器人逆运动学中旋转计算的核心数学工具,包括矩阵指数与对数、SO(3)李群与李代数、流形和切空间等概念,帮助理解三维旋转误差计算原理,并提供基于矩阵指数的精确旋转更新方法及代码实现。
342 1
机器人逆运动学进阶:李代数、矩阵指数与旋转流形计算
|
6月前
|
传感器 算法 定位技术
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
KF,EKF,IEKF 算法的基本原理并构建推导出四轮前驱自主移动机器人的运动学模型和观测模型(Matlab代码实现)
190 2
|
10月前
|
传感器 人工智能 算法
傅利叶开源人形机器人,提供完整的开源套件!Fourier N1:具备23个自由度和3.5米/秒运动能力
傅利叶推出的开源人形机器人N1搭载自研动力系统与多模态交互模块,具备23个自由度和3.5米/秒运动能力,提供完整开源套件助力开发者验证算法。
793 3
傅利叶开源人形机器人,提供完整的开源套件!Fourier N1:具备23个自由度和3.5米/秒运动能力
|
11月前
|
算法 机器人 数据安全/隐私保护
四自由度SCARA机器人的运动学和动力学matlab建模与仿真
本课题深入研究SCARA机器人系统,提出其动力学与运动学模型,并基于MATLAB Robotics Toolbox建立四自由度SCARA机器人仿真对象。通过理论结合仿真实验,实现了运动学正解、逆解及轨迹规划等功能,完成系统实验和算法验证。SCARA机器人以其平面关节结构实现快速定位与装配,在自动生产线中广泛应用,尤其在电子和汽车行业表现优异。使用D-H参数法进行结构建模,推导末端执行器的位姿,建立了机器人的运动学方程。
|
存储 JSON JavaScript
「offer来了」保姆级巩固你的js知识体系(4.0w字)
该文章提供了JavaScript知识体系的全面复习资料,覆盖了从基础语法到高级特性如闭包、原型链、异步编程等多个方面,并通过大量的面试题和实例代码帮助巩固理解。
「offer来了」保姆级巩固你的js知识体系(4.0w字)
|
数据可视化 机器人 Python
实例9:四足机器人运动学正解平面RR单腿可视化
本文是关于四足机器人正向运动学(FK)的实例教程,通过Python编程实现了简化的mini pupper平面二连杆模型的腿部可视化,并根据用户输入的关节角计算出每个关节相对于基坐标系的坐标。
452 1
PUN ☀️六、机器人基础设置:运动、相机、攻击与生命值
PUN ☀️六、机器人基础设置:运动、相机、攻击与生命值
|
数据可视化 算法 机器人
实例10:四足机器人运动学逆解可视化与实践
本文是关于四足机器人逆运动学(IK)的实例教程,介绍了逆运动学的概念、求解方法、多解情况和工作空间,并通过Python编程实现了简化的mini pupper平面二连杆模型的逆运动学可视化,包括单腿舵机的校准和动态可视化运动学计算结果。
1343 0
|
5月前
|
数据采集 自动驾驶 机器人
数据喂得好,机器人才能学得快:大数据对智能机器人训练的真正影响
数据喂得好,机器人才能学得快:大数据对智能机器人训练的真正影响
350 1
|
11月前
|
人工智能 自然语言处理 机器人
9.9K star!大模型原生即时通信机器人平台,这个开源项目让AI对话更智能!
"😎高稳定、🧩支持插件、🦄多模态 - 大模型原生即时通信机器人平台"
370 0

热门文章

最新文章