题解 | #机器人的运动范围#
机器人的运动范围
http://www.nowcoder.com/practice/6e5207314b5241fb83f2329e89fdecc8
public class Solution {
public int movingCount(int threshold, int rows, int cols) {
int rst = 0;
boolean[][] visits = new boolean[rows][cols];
LinkedList<Point> queue = new LinkedList<>(); //BFS
queue.add(new Point(0,0));
visits[0][0] = true;
while(!queue.isEmpty()) {
Point point = queue.poll();
rst++;
int[][] arr = new int[][]{{1,0},{0,1}}; //向下向右扫过去
for (int[] a : arr) {
Point v = new Point(point.rows+a[0], point.cols+a[1]);
boolean flag = isCanVisit(v, threshold, rows, cols);
if(flag && !visits[v.rows][v.cols]) {
visits[v.rows][v.cols] = true;
queue.add(v);
}
}
}
return rst;
}
private boolean isCanVisit(Point point, int threshold, int rows, int cols) {
if(point.rows < 0 || point.rows >= rows
|| point.cols < 0 || point.cols >= cols || threshold <= 0) {
return false;
}
int tmp = point.rows / 10 + point.rows % 10 + point.cols / 10 + point.cols % 10;
return tmp <= threshold;
}
}
class Point {
int rows;
int cols;
public Point(int rows, int cols) {
this.rows = rows;
this.cols = cols;
}
}

