【Java】剑指Offer_编程题_机器人的运动范围

牛客 剑指offer_编程题 详细题解 (已完结) 文章目录剑指offer_编程题【1.二维数组中的查找】【2.替换空格】C++JAVA【3.从尾到头打印链表】【4.重建二叉树】【5.用两个栈实现队列】【6.旋转数组的最小数字】暴力Sort二分法【7.斐波那契数列】【8.跳台阶】【9.变态跳台阶】 剑指offer_编程题 【1.二维数组中的查找】 【题目描述】 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都... 阅读详情

题目链接:https://www.nowcoder.com/questionTerminal/6e5207314b5241fb83f2329e89fdecc8

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

第一次编辑代码:

public class Solution {
    boolean[] visited = null;
    int sum = 0;
    public int movingCount(int threshold, int rows, int cols)
    {
        visited = new boolean[rows*cols];
        move(threshold,rows,cols,0,0);
        return sum;
    }
    public void move(int threshold, int rows, int cols,int i,int j){
        if(!visited[i*cols+j]){
            visited[i*cols+j] = true;
            sum++;
        }
        if(i>0 && isLegal(threshold,i-1,j))
            move(threshold,rows,cols,i-1,j);
        if(i<rows-1 && isLegal(threshold,i+1,j))
            move(threshold,rows,cols,i+1,j);
        if(j>0 && isLegal(threshold,i,j-1))
            move(threshold,rows,cols,i,j-1);
        if(j<cols-1 && isLegal(threshold,i,j+1))
            move(threshold,rows,cols,i,j+1);
    }
    public boolean isLegal(int threshold,int i,int j){
        int bit = 0;
        while(i>0){
            bit += i%10;
            i /= 10;
        }
        while(j>0){
            bit += j%10;
            j /= 10;
        }
        if(bit > threshold){
            return false;
        }else{
            return true;
        }
    }
}

提交结果
请检查是否存在数组越界等非法访问情况

反思
唯一的数组是visited,且范围应该没有出现越界情况。
为什么换种方法写就能对?

第二次编辑代码:

public class Solution {
    boolean[] visited = null;
    int sum = 0;
    public int movingCount(int threshold, int rows, int cols)
    {
        visited = new boolean[rows*cols];
        return move(threshold,rows,cols,0,0);
    }
    public int move(int threshold, int rows, int cols,int i,int j){
        if(i<0 || i>rows-1 || j<0 || j>cols-1)
            return 0;
        if(visited[i*cols+j] || !isLegal(threshold,i,j))
            return 0;
        visited[i*cols+j] = true;
        return 1+move(threshold,rows,cols,i-1,j)
                +move(threshold,rows,cols,i+1,j)
                +move(threshold,rows,cols,i,j-1)
                +move(threshold,rows,cols,i,j+1);
    }
    public boolean isLegal(int threshold,int i,int j){
        int bit = 0;
        while(i>0){
            bit += i%10;
            i /= 10;
        }
        while(j>0){
            bit += j%10;
            j /= 10;
        }
        if(bit > threshold){
            return false;
        }else{
            return true;
        }
    }
}

反思
今天在力扣上刷到一样的题,用牛客网提交的代码无法通过,看了评论换了dfs的思路求解,更加简洁。

第三次编辑代码:

class Solution {
    public int movingCount(int m, int n, int k) {
        boolean[][] visited = new boolean[m][n];
        return dfs(0, 0, m, n, k, visited);
    }
    public int dfs(int i, int j, int m, int n, int k, boolean[][] visited){
        if(i < 0 || i > m - 1 || j < 0 || j > n - 1 || (i/10 + i%10 + j/10 + j%10) > k || visited[i][j])
            return 0;
        visited[i][j] = true;
        return 1 
            + dfs(i - 1, j, m, n, k, visited) 
            + dfs(i + 1, j, m, n, k, visited) 
            + dfs(i, j - 1, m, n, k, visited) 
            + dfs(i, j + 1, m, n, k, visited);
    }
}
昇腾NPU实战:PaddleSpeech语音模型高效部署与性能优化指南 本文详细介绍了如何在华为昇腾NPU上高效部署PaddleSpeech语音识别模型。通过使用官方Docker镜像、解决依赖冲突、修改源码适配NPU算子,并应用混合精度与批处理等优化技巧,实现模型在昇腾平台上的稳定运行与性能提升,为AI语音应用提供高性价比的国产硬件部署方案。 阅读详情

相关推荐

Unity中USD场景导入与工业级协作实战指南

USD(Universal Scene Description)是一种面向复杂三维场景的结构化数据模型,其核心在于分层描述、变体管理与非破坏性组合,本质是支持多团队并行协作的场景协议。它不同于传统模型格式,强调运行时可编辑性与版本可控性,技术价值体现在跨软件资产一致性、零拷贝动态叠加及内存中实时合成。典型应用场景包括建筑BIM实时漫游、汽车多配置仿真、影视级灯光材质协同等工业管线。在Unity中,USD已深度集成于URP/HDRP管线,通过原生USD Importer、Runtime与Exporter三组件

weixin_32073537的博客 299

剑指offer习题:DAY 1

输入一个链表,按链表从尾到头的顺序返回一个ArrayList。 有三种思路,第一就是利用栈先入后出的特性完成,第二就是存下来然后进行数组翻转,第三是利用递归。 /** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : * ...

F班袁湘琴 190

TOEIC托业词汇汇总(完整版)

1.appointment 约会,约定2.attendance 出席人数;出席3.cabinet 橱柜4.calendar 日历;月历;行事历5.clerk 办事员,书记6.directory 人名住址薄7.duplicte 复制;副本8.filing 归档9.in-tray 待处理文件盒10.monitor 检测;监视;追踪11.out-tray 已处理文件盒12.partition 分隔;分隔物(如墙壁等)13.postage 邮费。

weixin_39676449的博客 1万+

剑指刷题 机器人的运动

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

m0_37896011的博客 250

为什么你的Mac蓝牙总断连?深入解析硬件干扰与系统设置避坑

本文深入解析Mac蓝牙频繁断连的原因,包括硬件干扰(如WiFi同频干扰、USB设备电磁干扰)和系统设置问题,并提供详细的优化方案和诊断工具(如blueutil)使用指南,帮助用户有效解决蓝牙稳定性问题。

ik67890123的博客 679

Nangate 45nm FreePDK开源工艺库:从RTL到GDSII全流程实战

在数字IC设计中,标准单元库是连接逻辑综合与物理实现的基石,它定义了每个单元的逻辑功能、时序延迟与物理尺寸。开源EDA工具链的成熟,使得个人也能借助免费工艺套件完整跑通芯片设计流程。Nangate 45nm FreePDK作为一套经典的开源工艺库,凭借结构清晰、配套完善的特性,成为学习数字后端和时序收敛的理想训练场。从综合工具Yosys读取Liberty文件进行逻辑映射,到OpenROAD执行布局布线与时钟树综合,再到使用OpenSTA分析关键路径延迟,这套流程涵盖了数字设计最核心的环节。通过亲手操作,开发

weixin_29168393的博客 270

机器人的运动范围(Java实现)

本题为剑指offer面试题67 测试链接:https://www.nowcoder.com/questionTerminal/6e5207314b5241fb83f2329e89fdecc8 来源:牛客网 [编程题]机器人的运动范围 热度指数:28092  时间限制:1秒  空间限制:32768K 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,

zjkC050818的博客 2109

深入MIPI DSI显示技术栈 (三) DSI vs CSI-2:孪生协议的本质差异

MIPI协议中的DSI与CSI-2存在本质差异:DSI为输出导向协议(Host→Display),用于屏幕控制和画面传输;CSI-2为输入导向协议(Sensor→Host),专攻图像采集。二者在包结构、同步机制、物理层优化等方面均有显著区别:DSI支持命令包和BLLP包,CSI-2具备嵌入式数据包;DSI时钟模式以Burst为主,CSI-2支持Continuous模式。典型场景中,二者协同工作(如手机相机预览),需注意时序同步和延迟控制。设计混合系统时,需合理规划虚拟通道和物理层资源,充分发挥这对&quot

GateWorld的博客 2105

剑指offer-机器人的运动范围-java

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

Lynn_Baby的博客 329

海康工业相机 Could not find module MvCameraControl.dll(已解决)

【代码】海康摄像机 Could not find module MvCameraControl.dll(已解决)

hmbbpdx的博客 2220

Tribon Vitesse开发教程(一)

Tribon Vitesse简介 Tribon Vitesse是Tribon提供给Python编程语言的编程接口,它是一系列的API。使用Python的语法调用这些API,结合Python语言自身的语法生成的程序叫做Vitesse程序。Vitesse是法语“速度”的意思,读作“为戴斯”。使用Tribon Vitesse可以直接访问Tribon产品信息模型和使用Tribon应用程序的功能,以控制设计

forevermemory的专栏 2588

《剑指offer》Java版全系列题解(2021版,持续更新!)

《剑指offer》Java版全系列题解(2021版,持续更新!) 本系列记录了最新版 《剑指Offer》 的题解过程与代码,因为原书是c语言。这里用Java代码复现并优化,并包含解题分析。 希望各位能够点赞,收藏!关注我! 每日更新! 如果在准备java面试,可以看看我的另外一篇文章! Java面试复习体系总结(2021版,持续更新) csdn题解(包含详细分析过程,代码) 力扣链接 剑指Offer系列(java版,详细解析) 03. 数组中重复的数字 剑指 Offer 03. 数组中重复

Viper的程序员修炼手册 2万+

uniapp:微信支付报错requestPayment:fail errors,uniAPP调用uni.requestPayment微信支付提示错误(安卓app、ios苹果app、微信小程序支付报错)

uniapp微信支付报错requestPayment:fail errors,uniApp APP端调起微信支付失败报错requestPayment:fail errors,uniapp微信小程序支付的坑 “errMsg“: “requestPayment:fail errors“,uni.requestPayment微信支付,UNI-APP支付报错“errMsg“: “requestPayment:fail errors“ app微信支付,uniapp 安卓app微信支付报错,uni.requestPay

✅ 精选推荐文章 3916

【编程题】机器人的运动范围(java实现)

【编程题】机器人的运动范围(java实现) 题目来源 剑指offer最后一题 https://www.nowcoder.com/practice/6e5207314b5241fb83f2329e89fdecc8?tpId=13&tqId=11219&rp=4&ru=/ta/coding-interviews&qru=/ta/coding-interviews/que...

qq_40432108的博客 573

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[剑指Offer]机器人的运动范围(Java)

题目 题目描述 思路 代码

聚沙成塔 553

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

剑指Offer-机器人的运动范围

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

疯狂的兔子 1005

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

LeetCode 之 剑指 Offer 13. 机器人的运动范围(Java)

LeetCode 之 剑指 Offer 13. 机器人的运动范围(Java),地上有一个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。请问该机器人能够到达多少个格子?

渣渣的夏天 969

剑指offer—13.机器人的运动范围——分析及代码(Java)

剑指offer——13.机器人的运动范围——分析及代码[Java]一、题目二、分析及代码1. 回溯法(1)思路(2)代码(3)结果三、其他 一、题目 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是...

江南土豆的博客 364

【剑指offer】Java版代码(完整版)

一、引言 《剑指offer》可谓是程序猿面试的神书了,在面试中帮了我很多,大部分面试的算法题都会遇到原题或者是类似的题。但是书上的代码都是C版的,我在这里整理了一份Java版的代码供大家学习参考,这些代码我都是在OJ上跑过全AC的,所以正确性你大可放心。 二、目录 赋值运算函数 单例设计模式 二维数组中查找目标值 替换字符串中的空格 从尾到头打印链表 由前序和中序遍历重建二叉树 用两个

白夜行 7万+

Java详解剑指offer面试题13--机器人的运动范围

Java详解剑指offer面试题13–机器人的运动范围 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子? 此题和面试题12——矩阵中的路径有相似之处,依然是回溯法。每来到一个新的且满足条件的格子时,计数加1。除

快乐李同学的博客 450

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

《剑指offer》刷题——【回溯法】面试题13:机器人的运动范围(java实现)

《剑指offer》刷题——【回溯法】面试题12:机器人的运动范围一、题目描述二、解题思路三、代码实现四、测试 一、题目描述 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行 坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方 格(35...

HW_870754395的博客 389

剑指OFFER笔记_13_机器人的运动范围_JAVA实现

剑指OFFER笔记_13_机器人的运动范围_JAVA实现题目:机器人的运动范围解题思路代码函数主体部分代码测试部分代码运行结果截图LeetCode运行截图 题目:机器人的运动范围 地上有一个m行n列的方格。一个机器人从坐标(0,0)的格子开始移动,它每次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位之和大于k的格子。请问该机器人能够到达多少个格子? 解题思路 此题与前一题类似,采用回溯法。 对(0,0)时的情况开始调用函数计算count,当此处的条件符合时,依次递归调用row±1和col

YesPlease的博客 348

剑指offer(第二版)——机器人的运动范围

PS:《剑指offer》是很多同学找工作都会参考的一本面试指南,同时也是一本算法指南(为什么它这么受欢迎,主要应该是其提供了一个循序渐进的优化解法,这点我觉得十分友好)。现在很多互联网的算法面试题基本上可以在这里找到影子,为了以后方便参考与回顾,现将书中例题用Java实现(第二版),欢迎各位同学一起交流进步。 GitHub: https://github.com/Uplpw/SwordOffer。 完整题目链接: https://blog.youkuaiyun.com/qq_41866626/article/detai

qq_41866626的博客 297

15机器人的运动范围--剑指offer,java版

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

sexy_orange的博客 202

【剑指Offer-Java】机器人的运动范围

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

IT Crowd的博客 234
上一篇: 【Java】剑指Offer_编程题_矩阵中的路径
下一篇: 【校招】面试_中移在线服务有限公司_开发工程师
includei
博客等级 码龄9年 406粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值