题目描述
地上有一个m行和n列的方格。
一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。
例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。
但是,它不能进入方格(35,38),因为3+5+3+8 = 19。
请问该机器人能够达到多少个格子?
代码实现
import java.util.*;
public class Solution {
public int movingCount(int threshold, int rows, int cols)
{
//遍历整个数组,排除不允许达到的各自
int count = 0;
boolean flag = true;
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
if(isFix(i,j,threshold)){
count++;
}else{
//需要特别注意只有一行或一列的情况,一旦某一个坐标不可达,后面的就无法走了
if(rows == 1 || cols == 1){
flag = false;
break;
}
}
}
if(cols == 1 && !flag ){
break;
}
}
return count;
}
//判断某一个格子是否能进入
public boolean isFix(int pox,int poy,int target){
ArrayList<Integer> numberList = new ArrayList<>();
while(pox > 0){ //将POX数位分解存放到list
numberList.add(pox%10);
pox = pox/10;
}
while(poy > 0){ //将POY数位分解存放到list
numberList.add(poy%10);
poy = poy/10;
}
int sum = 0;
for(int i=0;i<numberList.size();i++){
sum+=numberList.get(i);
}
return sum <=target;
}
}
解题思路