题目描述
地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
public class Solution {
int walk_num = 0;
int row2 = 0;
int col2 = 0;
int threshold2 = 0;
public int movingCount(int threshold, int rows, int cols) {
row2 = rows;
col2 = cols;
threshold2 = threshold;
int[][] array = new int[rows][cols];
walk(0, 0, array);
return walk_num;
}
public void walk(int now_row, int now_col, int[][] array) {
if (now_col < 0 || now_col >= col2 || now_row < 0 || now_row >= row2 || array[now_row][now_col] == 1
|| calculation(now_row, now_col) > threshold2) {
return;
}
walk_num++;
array[now_row][now_col] = 1;
walk(now_row + 1, now_col, array);
walk(now_row - 1, now_col, array);
walk(now_row, now_col + 1, array);
walk(now_row, now_col - 1, array);
return;
}
public int calculation(int row, int col) {
int sum = 0;
while (row > 0) {
sum += row % 10;
row = row / 10;
}
while (col > 0) {
sum += col % 10;
col = col / 10;
}
return sum;
}
}
int walk_num = 0;
int row2 = 0;
int col2 = 0;
int threshold2 = 0;
public int movingCount(int threshold, int rows, int cols) {
row2 = rows;
col2 = cols;
threshold2 = threshold;
int[][] array = new int[rows][cols];
walk(0, 0, array);
return walk_num;
}
public void walk(int now_row, int now_col, int[][] array) {
if (now_col < 0 || now_col >= col2 || now_row < 0 || now_row >= row2 || array[now_row][now_col] == 1
|| calculation(now_row, now_col) > threshold2) {
return;
}
walk_num++;
array[now_row][now_col] = 1;
walk(now_row + 1, now_col, array);
walk(now_row - 1, now_col, array);
walk(now_row, now_col + 1, array);
walk(now_row, now_col - 1, array);
return;
}
public int calculation(int row, int col) {
int sum = 0;
while (row > 0) {
sum += row % 10;
row = row / 10;
}
while (col > 0) {
sum += col % 10;
col = col / 10;
}
return sum;
}
}