借鉴面试题12.

class Solution {
public:
    int x[4]={0,0,-1,1};
    int y[4]={-1,1,0,0};
    int movingCount(int threshold, int rows, int cols){
        if(threshold<0 || rows<=0 || cols<=0) return 0;
        int num=0;
        vector<vector<bool>> visited(rows,vector<bool>(cols,false));
        dfs(threshold,rows,cols,0,0,num,visited);
        return num;
    }
    int dfs(int threshold,int rows,int cols,int i,int j,int &num,vector<vector<bool>> &visited){
        num++;
        visited[i][j]=true;
        for(int k=0;k<4;k++){
            int d_x=x[k]+i;
            int d_y=y[k]+j;
            int sum=sumP(d_x)+sumP(d_y);
            if(d_x>=0 && d_x<rows && d_y>=0 && d_y<cols){
                if(visited[d_x][d_y]==false && sum<=threshold) dfs(threshold,rows,cols,d_x,d_y,num,visited);
            }
        }
        return 0;
    }
    int sumP(int p){
        int a,sum=0;
        while(p>0){
            sum=sum+p%10;
            p=p/10;
        }
        return sum;
    }
};

改进:

class Solution {
public:
    int movingCount(int threshold, int rows, int cols){
        if(threshold<0 || rows<=0 || cols<=0) return 0;
        vector<vector<bool>> visited(rows,vector<bool>(cols,false));
        return dfs(threshold,rows,cols,0,0,visited);
    }
    int dfs(int threshold,int rows,int cols,int i,int j,vector<vector<bool>> &visited){
        int count=0;
        if(i>=0 && i<rows && j>=0 && j<cols && !visited[i][j]){
            int sum=sumP(i)+sumP(j);
            if(sum<=threshold){
                visited[i][j]=true;
                count=1+dfs(threshold,rows,cols,i,j-1,visited)+dfs(threshold,rows,cols,i,j+1,visited)+
                        dfs(threshold,rows,cols,i-1,j,visited)+dfs(threshold,rows,cols,i+1,j,visited);
            }
        }
        return count;
    }
    int sumP(int p){
        int a,sum=0;
        while(p>0){
            sum=sum+p%10;
            p=p/10;
        }
        return sum;
    }
};