13-机器人的运动轨迹
2020-05-05 本文已影响0人
一方乌鸦
地上有一个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。请问该机器人能够到达多少个格子?
public class Solution {
boolean[][] visited;
int rows;
int cols;
int count = 0;
int threshold;
public int movingCount(int threshold, int rows, int cols) {
if (rows == 0 || cols == 0) return 0;
if (threshold == 0) return 1;
visited = new boolean[rows][cols];
this.threshold = threshold;
this.rows = rows;
this.cols = cols;
move(0, 0);
return count;
}
private void move(int i, int j) {
if (i < 0 || j < 0 || i >= rows || j >= cols || visited[i][j]) return;
if (sum(i, j) <= threshold) {
count++;
visited[i][j] = true;
move(i - 1, j);
move(i + 1, j);
move(i, j - 1);
move(i, j + 1);
}
}
private int sum(int i, int j) {
int sum = 0;
while(i > 0) {
sum += i % 10;
i = i / 10;
}
while(j > 0) {
sum += j % 10;
j = j / 10;
}
return sum;
}
}