机器人的运动范围(剑指offer)

本文探讨了剑指offer中关于机器人运动范围的题目。当机器人在m行n列的方格内移动,且行列坐标的数位之和不超过k时,分析了如何判断机器人能到达的格子数量。通过标记法和程序实现,详细解释了解题思路和过程。
摘要由CSDN通过智能技术生成

最近刷剑指offer时碰到一个机器人运动范围的题:

地上有一个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。请问该机器人能够到达多少个格子?
提示:

1 <= n,m <= 100
0 <= k <= 20

首先我就新建了个excle表格来表示机器人可以到达的格子,发现当k<9的时候,很简单就可以得到答案 。但是这样的方式不具有普适性。当k=9时机器人可以到达的格子
接着读题,我们发现机器人是从(0,0)位置开始走,所有我们只用考虑机器人向下或者向右走的时候是否可以到达。换言之,就是机器人如果可以走到当前格子,那么他的上一个格子或者左一个格子是否是机器人可以到达的格子。

那么我们根据什么来判断我们需要判断的格子是否是机器人可以到达的呢?这个时候我就想到了标记。

然后我们开始写程序(程序配合着注释一起看,更容易理解)

我们先设一个二维数组,m列、n行的二维数组。

			int[][] visited=new int[m][n];

然后我们开始通过遍历给这个数组赋值。

			for (int i = 0; i < m; i++) {
   
                int a=i;//这儿必须设置一个值等于i,不能用i直接进行计算,否则会导致遍历出错,下面i1同样如此
                int x=0;//通过x来计算列的各个位数相加的值
                boolean flag=true;//通过标记来跳出while循环,虽然题目给的提示规定了m<=100,但是突破这个限制不麻烦,所以索性就不管它,下面的标记具有同样效果
                while (flag){
   
                    x=x+a%10;
                    if(a<10){
   
                        flag=false;
                    }
                    a=a/10;
                }
            
                for (int i1 = 0; i1 < n; i1++) {
   
                    int b=i1;
                    int y=0;
                    boolean flag1=true;
                    while (flag1){
   
                        y=y+b%10;
                        if(b<10){
   
                            flag1=false;
                        }
                        b=b/10;
                    }
                    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值