classSolution{boolean[][] flag;publicintmovingCount(int m,int n,int k){
flag =newboolean[m][n];// 用bfs的方法来搜寻。
LinkedList<int[]> list =newLinkedList();
list.add(newint[]{0,0});
flag[0][0]=true;int x;int y;int res =1;while(!list.isEmpty()){int[] tmp = list.remove();
x = tmp[0];
y = tmp[1];// 向下一个结点if(x +1< m &&!flag[x +1][y]&&compare(x +1, y, k)){
res++;
list.add(newint[]{x +1, y});
flag[x +1][y]=true;}if(y +1< n &&!flag[x][y +1]&&compare(x, y +1, k)){
res++;
list.add(newint[]{x, y +1});
flag[x][y +1]=true;}}return res;}publicbooleancompare(int x,int y,int k){int tmp = x %10+ x /10%10+ y %10+ y /10%10;return tmp <= k;}}
思路二:深度优先遍历,速度更快。
classSolution{boolean[][] flag;int k;int m;int n;int res;publicintmovingCount(int m,int n,int k){// 用深度优先搜索的方法,dfsthis.k = k;
flag =newboolean[m][n];this.m = m;this.n = n;search(0,0);return res;}publicvoidsearch(int x,int y){if(x >= m || y >= n)return;if(!flag[x][y]&&compare(x, y, k)){
res++;
flag[x][y]=true;search(x +1, y);search(x, y +1);}}publicbooleancompare(int x,int y,int k){int tmp = x %10+ x /10%10+ y %10+ y /10%10;return tmp <= k;}}