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。请问该机器人能够到达多少个格子?
解决
class Solution {
public int movingCount(int m, int n, int k) {
if(k==0) return 1; //如果k=0,则能够达到的格子自由第1个
int end=1; //定义格子计数器
boolean[][] ren=new boolean[m][n]; //定义机器人能够走的格子位置的数组
ren[0][0]=true; //因为前面已经定义了end=1所以ren的第一个位置是一定为真的
for(int i=0;i<m;++i){
for(int j=0;j<n;++j){ //两个循环确定能够走的格子,如果能够走,end就+1,不能就进行其余的格子验证
if((i==0&&j==0)||check(i)+check(j)>k) continue; //如果处于ren或者位数大于k时直接进行下一次判断
if(j-1>=0){
ren[i][j]|=ren[i][j-1]; // |=位运算符
}
if(i-1>=0){
ren[i][j]|=ren[i-1][j];
}
end+=ren[i][j]?1:0;
}
}
return end;
}
private int check(int x){ //获取m、n的位数方法
int ans=0;
while(x!=0){
ans+=x%10;
x/=10;
}
return ans;
}
}
//能够走的格子的位数之和要小于等于k
// 回溯算法:我的理解就是先从上往下,不符合再从下网上,然后继续上述步骤直达遇到符合的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程