机器人的运动范围:基本思路是广度优先遍历。在遍历一个点之前,先对其进行边界检查和门限检查。设置一个二维数组,用于表示该点是否已经被走过,如果被走过,则不参与计数。判断门限时,这里使用了字符串的形式,也可以采用其它形式。时间复杂度:O(mn)空间复杂度O(mn)
public class Solution {
int count = 0;
class Pos{
int px;
int py;
public Pos(int px,int py){this.px = px;this.py=py;}
}
public int movingCount(int threshold, int rows, int cols) {
int [][] mat =new int[rows][cols];
Queue<Pos> que = new LinkedList<>();
que.offer(new Pos(0,0));
while(!que.isEmpty()){
Pos p = que.poll();
if(p.px<rows&&p.px>=0&&p.py<cols&&p.py>=0){
if(bitSum(p.px+""+p.py)<=threshold&&mat[p.px][p.py]==0){
mat[p.px][p.py]=1;
count++;
que.offer(new Pos(p.px-1,p.py));
que.offer(new Pos(p.px,p.py-1));
que.offer(new Pos(p.px+1,p.py));
que.offer(new Pos(p.px,p.py+1));
}
}
}
return count;
}
public int bitSum(String s){
int sum = 0;
for(int i=0;i<s.length();++i){
sum+=s.charAt(i)-'0';
}
return sum;
}
}