标签:rows Java int visted cols 牛客 row col 刷题
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
class SolutionMethod1{
public int movingCount(int threshold,int rows,int cols){//threshold 约束值,rows 方格行数,cols 方格列数,
boolean[] visted = new boolean[rows*cols];
for(int i = 0; i < visted.length; i++)
visted[i] = false;
int count = movingCountCore(threshold,rows,cols,0,0,visted);
return count; //最多可走的方格数
}
public int movingCountCore(int threshold,int rows,int cols,int row,int col,boolean[] visted){
//threshold 约束值 ;rows 方格行数;cols 方格列数;row 当前处理的行号;col 当前处理的列号;visted 访问标记数组
int count = 0;
if(check(threshold,rows,cols,row,col,visted)){
visted[row*cols + col] = true;
count = 1 + movingCountCore(threshold,rows,cols,row - 1,col,visted) +
movingCountCore(threshold,rows,cols,row,col - 1,visted) +
movingCountCore(threshold,rows,cols,row + 1,col,visted) +
movingCountCore(threshold,rows,cols,row,col + 1,visted);
}
return count; //最多可走的方格数
}
boolean check(int threshold,int rows,int cols,int row,int col,boolean[] visted){
if(row >= 0 && row < rows && col >= 0 && col < cols
&& (getDigitSum(row) + getDigitSum(col) <= threshold)
&& !visted[row* cols + col])
return true;
return false;
}
public int getDigitSum(int number){ //number 数字
int sum = 0;
while(number > 0){
sum += number%10;
number /= 10;
}
return sum; //数字的位数之和
}
}
public class Solution {
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入限制条件k:");
int k = scanner.nextInt();
System.out.println("请输入方格的行数m:");
int m = scanner.nextInt();
System.out.println("请输入方格的列数n:");
int n = scanner.nextInt();
SolutionMethod1 solution1 = new SolutionMethod1();
scanner.close();
System.out.println("矩阵能到达的方格数是:");
System.out.println(solution1.movingCount(k, m, n));
}
}
标签:rows,Java,int,visted,cols,牛客,row,col,刷题 来源: https://blog.csdn.net/lemonwen/article/details/99694692
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。