剑指offer系列之六十五:机器人的运动范围

简介:

题目描述

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

这题实际与上一题“矩阵中的路径”思路是相似的,都是需要创建一个状态数组对访问的格子进行标记,但是这里需要计算所有能够走的格子总数,实际上只需要对下一个进行访问的格子进行计算,进行从上、下、左、右四个方向进行递归,就可以计算出可以达到的格子总数了。下面是具体的实现代码(已被牛客AC):

package com.rhwayfun.offer;

public class RobotMovingCount {

    public int movingCount(int threshold, int rows, int cols) {
        // 创建一个数组记录一个格子是否被访问
        boolean[][] visited = new boolean[rows][cols];
        return movingCountCore(threshold, rows, cols, 0, 0, visited);
    }

    private int movingCountCore(int threshold, int rows, int cols, int i,
            int j, boolean[][] visited) {
        int count = 0;
        // 异常处理
        if (i < 0 || i >= rows || j < 0 || j >= cols
                || numberIndexCount(i) + numberIndexCount(j) > threshold
                || visited[i][j])
            return 0;
        visited[i][j] = true;
        count = 1 + movingCountCore(threshold, rows, cols, i - 1, j, visited)
                  + movingCountCore(threshold, rows, cols, i + 1, j, visited)
                  + movingCountCore(threshold, rows, cols, i, j - 1, visited)
                  + movingCountCore(threshold, rows, cols, i, j + 1, visited);
        return count;
    }

    // 用于计算每个坐标的数位之和
    private int numberIndexCount(int number) {
        int sum = 0;
        while (number > 0) {
            sum += number % 10;
            number /= 10;
        }
        return sum;
    }

    public static void main(String[] args) {
        int sum = new RobotMovingCount().movingCount(5, 10, 10);
        System.out.println(sum);
    }
}
目录
相关文章
|
6月前
|
机器人
剑指 Offer 13:机器人的运动范围
剑指 Offer 13:机器人的运动范围
49 0
|
3月前
|
数据可视化 机器人 Python
实例9:四足机器人运动学正解平面RR单腿可视化
本文是关于四足机器人正向运动学(FK)的实例教程,通过Python编程实现了简化的mini pupper平面二连杆模型的腿部可视化,并根据用户输入的关节角计算出每个关节相对于基坐标系的坐标。
68 1
|
3月前
|
机器人
PUN ☀️六、机器人基础设置:运动、相机、攻击与生命值
PUN ☀️六、机器人基础设置:运动、相机、攻击与生命值
|
3月前
|
数据可视化 算法 机器人
实例10:四足机器人运动学逆解可视化与实践
本文是关于四足机器人逆运动学(IK)的实例教程,介绍了逆运动学的概念、求解方法、多解情况和工作空间,并通过Python编程实现了简化的mini pupper平面二连杆模型的逆运动学可视化,包括单腿舵机的校准和动态可视化运动学计算结果。
164 0
|
6月前
|
NoSQL 机器人 Windows
ROS机器人编程技术控制两只小海龟的编队运动
ROS机器人编程技术控制两只小海龟的编队运动
237 1
|
6月前
|
机器人 Python
Moveit + Gazebo实现联合仿真:ABB yumi双臂机器人( 二、双臂协同运动实现 )
Moveit + Gazebo实现联合仿真:ABB yumi双臂机器人( 二、双臂协同运动实现 )
|
6月前
|
机器学习/深度学习 人工智能 机器人
[译][AI 机器人] Atlas的电动新时代,不再局限于人类运动范围的动作方式
波士顿动力宣布液压Atlas机器人退役,推出全新电动Atlas,旨在实现更广泛的实际应用。这款全电动机器人将拓展人类运动范围,解决复杂工业挑战。现代汽车公司将参与其商业化进程,作为测试应用场景。波士顿动力计划与创新客户合作,逐步迭代Atlas的应用,打造高效、实用的移动机器人解决方案。Atlas将结合强化学习和计算机视觉等先进技术,通过Orbit软件平台进行管理,未来将在真实世界中发挥超越人类能力的作用。
|
4天前
|
自然语言处理 算法 机器人
智能电话销售机器人源码搭建部署系统电话机器人源码
智能电话销售机器人源码搭建部署系统电话机器人源码
15 4
|
15天前
|
机器学习/深度学习 传感器 算法
智能机器人在工业自动化中的应用与前景###
本文探讨了智能机器人在工业自动化领域的最新应用,包括其在制造业中的集成、操作灵活性和成本效益等方面的优势。通过分析当前技术趋势和案例研究,预测了智能机器人未来的发展方向及其对工业生产模式的潜在影响。 ###
61 9
|
7天前
|
机器学习/深度学习 人工智能 运维
电话机器人源码-智能ai系统-freeswitch-smartivr呼叫中心-crm
电话机器人源码-智能ai系统-freeswitch-smartivr呼叫中心-crm
25 0
下一篇
无影云桌面