public class Solution { int threshold; public int movingCount(int threshold, int rows, int cols) { // DFS this.threshold = threshold; int[][] flag = new int[rows][cols]; return helper(0, 0, rows, cols, flag); } private int helper(int i, int j, int row, int col, int[][] flag) { if(i < 0 || i >= row || j < 0 || j >= col || flag[i][j] == 1 || numSum(i) + numSum(j) > threshold) { return 0; } flag[i][j] = 1; // 标记已经走过 // 只需要先向下走再一层一层向右走,回溯 return helper(i + 1, j, row, col, flag) + helper(i, j + 1, row, col, flag) + 1; } private int numSum(int num) { int sum = 0; do { sum += num % 10; } while((num = num / 10) > 0); return sum; } }