1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution { boolean[][] visited; public int movingCount(int m, int n, int k) { visited = new boolean[m][n]; return dfs(0,0,m,n,k); }
public int bitSum(int m, int n){ int m1 = m % 10; int m2 = m / 10; int n1 = n % 10; int n2 = n / 10; return m1+m2+n1+n2; }
public int dfs(int i,int j, int m, int n,int k){ if(i < 0 || i >= m || j < 0 || j >= n || bitSum(i,j) > k || visited[i][j]){ return 0; } visited[i][j] = true; return 1+dfs(i+1,j,m,n,k)+dfs(i-1,j,m,n,k)+dfs(i,j+1,m,n,k)+dfs(i,j-1,m,n,k); } }
|