问题描述:
解题思路:
采用bfs从左上到右下搜索
class Solution {
public int movingCount(int m, int n, int k) {
if(k == 0){
return 1;
}
Queue<int[]> queue = new LinkedList<int[]>();
int[]tx = new int[]{0,1};
int[]ty = new int[]{1,0};
queue.offer(new int[]{0,0});
boolean[][] vis = new boolean[m][n];
vis[0][0] = true;
int res = 1;
while(!queue.isEmpty()){
int[]cel = queue.poll();
int x = cel[0];
int y = cel[1];
for(int i = 0;i < 2;i++){
int dx = tx[i]+x;
int dy = ty[i]+y;
if(dx<0||dx>=m||dy<0||dy>=n||vis[dx][dy]||get(dx)+get(dy)>k){
continue;
}
queue.offer(new int[]{dx,dy});
vis[dx][dy] = true;
res++;
}
}
return res;
}
private int get(int x) {
int res = 0;
while (x != 0) {
res += x % 10;
x /= 10;
}
return res;
}
}