publicintmovingCount(int m, int n, int k) { boolean[][] used = newboolean[m][n]; CountHoldercountHolder=newCountHolder(); dfs(used, 0, 0, countHolder, m, n, k); return countHolder.count; }
privatevoiddfs(boolean[][] used, int i, int j, CountHolder countHolder, int m, int n, int k) { if (i >= m || j >= n || used[i][j]) { return; }
if (sumOfDigits(i) + sumOfDigits(j) <= k) { countHolder.count++; used[i][j] = true; dfs(used, i + 1, j, countHolder, m, n, k); dfs(used, i, j + 1, countHolder, m, n, k); } }
privateintsumOfDigits(int num) { intsum=0; while (num > 0) { sum += num % 10; num /= 10; } return sum; } }