回溯法解决机器人运动范围问题

回溯法--深度优先搜索 回溯法--深度优先搜索,AutoPilot02(去哪儿2017校招真题),AutoPilot(去哪儿2017校招真题),矩阵中的路径,剑指offer;机器人的运动范围 ,剑指offer 阅读详情

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

下面是代码,解题思路在注释中


        public int movingCount(int threshold, int rows, int cols)
        {
            int count = 0;
            int x = 0;
            int y = 0;
            //定义方格数组,若数组被访问过值为1,否则为0
            int[][] movedPosition = new int[rows][];
            for (int i = 0; i < rows; i++)
            {
                movedPosition[i] = new int[cols];
            }
            //先给数组赋值,刚开始都为0(废话)
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    movedPosition[i][j] = 0;
                }
            }
            //刚开始的时候机器人在[0][0]位置,如果此时超过threshold,则该位置为0,否则为1
            if (getSum(x) + getSum(y) <= threshold)
            {
                movedPosition[0][0] = 1;
            }
            //刚开始在[0][0]位置,只能往右边和下边移动
            move(x + 1, y, movedPosition, threshold, rows, cols);
            move(x, y + 1, movedPosition, threshold, rows, cols);
            //遍历格子数组,为1的位置就是可以走到的位置
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    if (movedPosition[i][j] == 1)
                    {
                        count++;
                    }
                }
            }
            return count;
        }
        /// <summary>
        /// 控制机器人移动的方法
        /// </summary>
        /// <param name="x">机器人要移动到的目的地的x轴坐标</param>
        /// <param name="y">机器人要移动到的目的地的y轴坐标</param>
        /// <param name="movedPosition">格子数组</param>
        /// <param name="threshold"></param>
        /// <param name="rows"></param>
        /// <param name="cols"></param>
        public void move(int x, int y, int[][] movedPosition, int threshold, int rows, int cols)
        {
            //若x,y的值大于零且不超过rows和cols,各个位数加和没有超过门槛且格子数组内这个位置还没有被访问过,执行如下方法
            if (x >= 0 && y >= 0 && x < rows && y < cols && getSum(x) + getSum(y) <= threshold && movedPosition[x][y] == 0)
            {
                movedPosition[x][y] = 1;//该位置置1,表示可以走过
                //让机器人往上,下,左,右,移动
                move(x + 1, y, movedPosition, threshold, rows, cols);
                move(x - 1, y, movedPosition, threshold, rows, cols);
                move(x, y + 1, movedPosition, threshold, rows, cols);
                move(x, y - 1, movedPosition, threshold, rows, cols);
            }
            //否则返回
            return;
        }
        /// <summary>
        /// 该方法用来获取数字的各个位数的加和
        /// </summary>
        /// <param name="x"></param>
        /// <returns></returns>
        public int getSum(int x)
        {
            int sum = 0;
            while (x > 0)
            {
                sum = sum + x % 10;
                x = x / 10;
            }
            return sum;
        }

本来觉得挺简单的题目,因为一些非技术原因搞得一下午都没解决(二维数组的声明,数组越界之类的问题),果然自己还有很长的路要走。

GaN制备micro-led(一) 随着第三代半导体 GaN 材料的快速发展,GaN 基 LED 发展迅速并广泛商业化,这 为可见光通信的实现及应用提供了基础。然而,普通商用 LED 的调制带宽只有几十兆 赫兹,并不能很好的满足可见光通信系统高传播速率的需求。为增大调制带宽,针对发 射端 LED 光源部分的改进仍需提高。将光子晶体结构引入 LED 芯片量子阱内部,能够 影响光子寿命和光子传播,进而改变 LED 芯片的调制带宽和光提取效率。结合倒装微 尺寸(Micro)LED 结构,使其封装体积最小化,这使得可见光通信能够更加灵活地. 阅读详情

相关推荐

人形机器人_双足行走动力学:基于OpenSim平台的股骨模型与建模

摘要 本文系统解析了股骨模型的生物力学特性、建模方法及应用场景,并探讨了基于OpenSim平台的股骨与42块肌肉Hill-type建模的技术流程。股骨作为人体核心承重骨骼,其几何结构、力学性能及多尺度建模方法在医学仿真、假体设计和仿生机器人领域具有重要价值。OpenSim通过逆向动力学、肌肉力优化及多物理场耦合,为临床步态分析、手术规划及仿生系统开发提供量化工具。同时对比了Hill-type模型与其他肌肉模型的优劣,并展望AI驱动建模、智能材料集成等前沿方向。未来研究将聚焦个性化仿真、实时计算优化及生物-机

一枚农夫,闲来有事聊聊天,交个朋友,让沉闷的生活畅想下 1580

每日一题:Leetcode 面试题13.机器人的运动范围

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

qq_44584356的博客 767

ServiceNow Discovery & CMDB Interview Questions and Answers (2025)

【代码】ServiceNow Discovery & CMDB Interview Questions and Answers (2025)

weixin_47584092的博客 910

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格...

public class Solution { public int movingCount(int threshold, int rows, int cols) { if(threshold < 0 || rows < 0 || cols < 0){ return 0; } ...

weixin_30786657的博客 392

详细介绍pytorch重要的API

Tensor 是 PyTorch 中最基本的数据结构,提供了多种创建和操作张量的函数。Autograd 提供了自动求导功能,可以跟踪 Tensor 上的操作并计算梯度。损失函数用于衡量模型预测值与真实值之间的差异,提供了多种损失函数。是构建神经网络的基础类,提供了定义网络层和前向传播的方法。提供了 GPU 计算的支持,包括设备管理、内存管理等。提供了一些常用的函数式操作,如激活函数、损失函数等。提供了常用的数据集、模型架构和图像转换工具。提供了数据加载和预处理的工具,包括。

hello! 1223

c语言:读取文件中的指定内容

项目中要求从wifi的状态文件中提取出rssi字段的值,还有一个前提条件:必须与hwaddr(手机的MAC地址)一一对应。 wifi状态文件sta_info如下: # cat /proc/wlan0-vap0/sta_info -- STA info table -- (active: 1) 1: stat_info... state: 405 AuthAlgrthm: 0

u013485792的专栏 1万+

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。

题目介绍 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子? 题目分析 很典型的使用回溯法进行求解,并对矩...

qq_29462849的博客 1908

littlefs系列:wear leveling

wear leveling的功能是通过block alloctor实现的。littlefs通过两个方法实现磨损均衡: 1) 检测和恢复bad blocks 2)通过dynamic blocks均衡磨损 检测和恢复bad blocks和block alloctor的关系并不紧密,主要依靠文件系统本身来检测坏块并标记。在littlefs中,检测坏块主要是通过写后回读并比较的方式实现的,如果数据不一致则说明是一个坏块。一旦检测到了坏块就要进行恢复。 如果是写入错误,因为数据才RAM中还有备份,因此需.

nstcl的博客 2570

剑指Offer-机器人的运动范围(两种详细解法,python)

题目描述: 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子? 解题方法: 这个题目可以有两种解法:(1)回溯法(2)规律法(自创的) 我们首先来看回溯法~ 1.回溯法 回溯法就是,我现在处于一个满足条件的格子,然后我

peppermint_xiao的博客 488

Vibe Writing 手把手教程:Obsidian + Claudian + Skill

本文介绍了Vibe Writing的实操教程,主要使用Obsidian+Claudian+Skill组合。教程包含工具安装配置(Obsidian、Claudian插件)、核心工作流(选题-调研-写作-发布)和效果对比。重点展示了Claude Code生成的文本更具"人味"和场景感,优于其他AI工具。作者强调工具只是辅助,内容灵魂仍需个人思考积累。附有公众号排版和全网发布工具推荐,以及自动配图生成方案。

300

基于STM32姿态解算-正点原子ATK-IMU901模块标准库开发——正点原子串口角度传感器模块十轴IMU加速度气压计陀螺仪_资料编号29

购买了正点原子的ATK-IMU901模块后,发现例程给的是HAL库的,本项目将HAL库例程转换为库函数版本(基于STM32)。实战开发,亲测无误。

嵌入式阿齐Archie 3865

Java实现 LeetCode 面试题13. 机器人的运动范围(DFS)

面试题13. 机器人的运动范围 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8...

南 墙 1万+

13、深入理解 Microsoft 365 的安全与合规概念

本文深入探讨了 Microsoft 365 的安全与合规概念,涵盖文档存储、文件共享、审计、保留、eDiscovery、分类和保护以及网络等多个关键方面。通过合理配置这些功能,组织可以更好地管理和保护其数据资源,满足法规要求,并提升工作效率。文章还提供了最佳实践建议及流程图,帮助读者全面理解 Microsoft 365 的安全架构和管理策略。

k8s6orchestrator的博客 212

回溯法解决问题 ——矩阵中的路径、机器人的运动范围

文章目录案例1:矩阵中的路径1. 问题描述2. 思路分析3. 步骤 案例1:矩阵中的路径 1. 问题描述 设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如,矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含...

weixin_43580746的博客 299

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

回朔法之机器人的运动范围

回溯法可以看成蛮力法的升级版,它从解决问题每一步的所有可能选项里系统地选择出一个可行的解决方案。回溯法非常适合由多个步骤组成的问题,并且每个步骤都有多个选项。当我们在某一步选择了其中一个选项时,就进入下一步,然后又面临新的选项。我们就这样重复选择,直至到达最终的状态。 【注:蛮力法,也称为穷举法或枚举法,是一种简单直接地解决问题的方法,常常直接基于问题的描述,所以,蛮力法也是最容易应用的方法。但...

H_Expect的博客 265

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

回溯法之矩阵中的路径和机器人的运动范围

1. 回溯法 回溯法解决非常适合有多个步骤组成的问题,并且每个步骤都有多个选项。用回溯法解决的问题的所有选项可以形象地用树状结构表示。如果再叶节点的状态不满足约束条件。那么只好回溯它的上一个节点再尝试其他的选项。 1.1 矩阵中的路径 public class Solution1 { public boolean hasPath(char[] matrix, int rows, int cols, char[] str) { //标志位,初始化为false boole

Zmd_23的博客 278

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Nowcoder java-机器人的运动范围

Nowcoder java-机器人的运动范围 (题目来自牛客网) 思路 回溯法 剑指offer(68):机器人的运动范围(回溯法) 代码 public class MovingCount { public int movingCount(int threshold, int rows, int cols) { int flag[][] = new int[rows][cols]; //记录是否已经走过 return helper(0, 0, rows, cols,

weixin_43675940的博客 201

回溯法求解算法题

回溯法是指

jiangzuofengqiao的博客 359

剑指offer12 13 回溯法 矩阵中路径 机器人运动范围

回溯法思想 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法 题目一:矩阵中的路径 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格...

qq_33604222的博客 307

《剑指offer》刷题笔记(回溯法):机器人的运动范围

《剑指offer》刷题笔记(回溯法):机器人的运动范围 转载请注明作者和出处:http://blog.youkuaiyun.com/u011475210 代码地址:https://github.com/WordZzzz/Note/tree/master/AtOffer 刷题平台:https://www.nowcoder.com/ 题  库:剑指offer 编  者:WordZzzz

WordZzzz 2005

机器人的运动范围 (回溯法)

与上有一个矩阵路径问题相似,同样可以采用回溯法 ,从0开始试探,如果符合条件则会继续探查其周围的四个位置,每次走到位置,都会将其置为已经访问,当走不下去时,就会 返回上一层的位置,继续寻找剩下的周围的位置。 代码如下 /** * */ /*** * @author 18071 * @Date 2019年2月23日 * 功能: 机器人的运动范围: * 地上有一个m行n列的方格。一个...

Since Gate 837

机器人的运动范围,Java实现

该题型属于回溯法的模型: 回溯法适合由多个步骤组成的问题,而且每一个步骤有多个选择。选择了其中一个以后,又会面临新的选择。在不断选择的过程中到达最终状态 /** * 机器人的运动范围 * 使用回溯法解决 */ public class Main13 { //记录能走的格子总数 public int total = 0; //函数入口 pub...

aa792978017的博客 257

回溯法——机器人的运动范围

回溯法——机器人的运动范围 题目描述: 地上有一个M行和N列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35,37),因为3 + 5 + 3 + 7 = 18.但是,它不能进入​​方格(35, 38),因为3 + 5 + 3 + 8 = 19.请问该机器人能够...

kevin980123的编程世界 325

剑指 13 机器人的运动范围

剑指 13 机器人的运动范围 文章目录剑指 13 机器人的运动范围原题目考查知识点好的解法优化获得的思考 原题目 地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多

日月既往,不可复追 273

剑指Offer对答如流系列 - 机器人的运动范围

文章目录面试题12:机器人的运动范围一、题目描述 面试题12:机器人的运动范围 一、题目描述 地上有一个m行n列的方格。一个机器人从坐标(0, 0)的格子开始移动,它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35, 37),因为3+5+3+7=18。但它不能进入方格(35, 38),因为3+5+3+8=19。请问该机...

明月沉江春雾晓 1483

剑指Offer(Python多种思路实现):机器人的运动范围

剑指Offer(Python多种思路实现):机器人的运动范围 面试13题: 题目:机器人的运动范围 题:地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+...

weixin_44151089的博客 3354
上一篇: 用动态规划和贪心算法求解割绳子问题
下一篇: 用深度遍历(DFS)和回溯法解决矩阵中的路径问题
Currybeefer
博客等级 码龄7年 49粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值