剑指 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 } //提交未通过
· 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应用必不可少的技术