剑指 Offer 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。请问该机器人能够到达多少个格子?

 

示例 1:

输入:m = 2, n = 3, k = 1
输出:3

示例 2:

输入:m = 3, n = 1, k = 0
输出:1

提示:

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

 

代码:

复制代码
 1 class Solution {
 2     public static int count;
 3     public int movingCount(int m, int n, int k) {
 4         if(k==0||(m==0&&n==0)){return 1;}
 5         count=0;
 6         boolean[][] bool=new boolean[m][n];
 7         move(bool,m,n,0,0,k);
 8         return count;
 9     }
10 
11     //移动方法
12     public static void move(boolean[][] bool,int m,int n,int index_0,int index_1,int k){
13         bool[index_0][index_1]=true;
14         count++;
15 
16         int num1=index_0/10;
17         if(num1==10){num1/=10;}  // 判断是不是100
18         int num2=index_0%10;
19 
20         int num3=index_1/10;
21         if(num3==10){num3/=10;}
22         int num4=index_1%10;
23 
24          //只有两个方向,上,左可能可以走
25         if(num1+num2+num3+num4==k){
26             //判断上可不可以走
27             if(index_0>0&&bool[index_0-1][index_1]==false){
28                 move(bool,m,n,index_0-1,index_1,k);
29             }
30             //判断左可不可以走
31             if(index_1>0&&bool[index_0][index_1-1]==false){
32                 move(bool,m,n,index_0,index_1-1,k);
33             }
34         }   
35 
36         //可能可以走四个方向  if(num1+num2+num3+num4<k)
37         else {
38             //判断上可不可以走
39             if(index_0>0&&bool[index_0-1][index_1]==false){
40                 move(bool,m,n,index_0-1,index_1,k);
41             }
42             //判断左可不可以走
43             if(index_1>0&&bool[index_0][index_1-1]==false){
44                 move(bool,m,n,index_0,index_1-1,k);
45             }
46             //判断下可不可以走
47             if(index_0<m-1&&bool[index_0+1][index_1]==false){
48                 move(bool,m,n,index_0+1,index_1,k);
49             }
50             //判断右可不可以走
51             if(index_1<n-1&&bool[index_0][index_1+1]==false){
52                 move(bool,m,n,index_0,index_1+1,k);
53             }
54         } 
55 
56     }
57 }  //提交未通过
复制代码

 

posted @   堤苏白  阅读(12)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示