class Solution {
// 方块必须连着,不能跨界存在
// 广度优先遍历,空间复杂度O(mn),时间复杂度:考虑所有方块都可以进入,则O(mn)
public int movingCount(int m, int n, int k) {
if(k==0){
return 1;
}
int res=1;
boolean[][] mark=new boolean[m][n];
mark[0][0]=true;
int[][] direction=new int[][]{{0,1},{1,0}};
Queue<int[]> queue=new LinkedList<>();
queue.offer(new int[]{0,0});
while(queue.size()!=0){
int[] cur=queue.poll();
for (int i = 0; i < 2; i++) {
int newx=direction[i][0]+cur[0];
int newy=direction[i][1]+cur[1];
if(newx>=m||newx<0||newy>=n||newy<0||mark[newx][newy]||get(newx)+get(newy)>k){
continue;
}
res++;
mark[newx][newy]=true;
queue.offer(new int[]{newx,newy});
}
}
return res;
}
public int get(int target){
int res=0;
while(target!=0){
res+=target%10;
target=target/10;
}
return res;
}
}