剑指offer 13 机器人的运动范围

public class Solution {
    int k=0;
    public int movingCount(int threshold, int rows, int cols)
    {
        if(threshold==0)
            return 0;
        int [][]visit=new int[rows][cols];
        for(int i=0;i<rows;i++){
            for(int j=0;j<cols;j++){
                visit[i][j]=0;
            }
        }
        //visit[0][0]=1;这个语句一旦写上程序就没有入门了 因为起始点标注了已访问
        moveCount(visit,threshold,0,0);
        return k;
    }
    public void moveCount(int[][]visit,int threshold,int i,int j){
        //条件一定要仔细仔细再仔细!j>visit[0].length-1,[0]很重要 -1也很重要
        if(i<0||i>visit.length-1||j<0||j>visit[0].length-1||visit[i][j]==1||cantArrive(i,j,threshold)){
            return;
        }
        k++;
        visit[i][j]=1;
        moveCount(visit,threshold,i,j-1);
        moveCount(visit,threshold,i,j+1);
        moveCount(visit,threshold,i-1,j);
        moveCount(visit,threshold,i+1,j);
        //visit[i][j]=0;
    }
    public boolean cantArrive(int i,int j, int threshold){
        int sum1=0;
        int sum2=0;
        while(i/10!=0){
            sum1+=i%10;
            i/=10;
        }
        sum1+=i;
        while(j/10!=0){
            sum2+=j%10;
            j/=10;
        }
        sum2+=j;
        if(sum1+sum2>threshold)
            return true;
        else 
            return false;
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务