剑指 Offer 13. 机器人的运动范围

package leetcode;

public class offer_13 {
    //全局变量记录总数
    int count=0;
    public int movingCount(int m, int n, int k) {
        //防止重复计数
        int[][] visit=new int[m][n];
        backtrack(m, n, k, visit, 0, 0);
        return count;
    }
    //行坐标和列坐标的数位之和
    public int toSum(int m,int n) {
        int sum=0;
        while(m!=0||n!=0) {
            sum=m%10+n%10+sum;
            m=m/10;
            n=n/10;
        }
        return sum;
    }
    
    public void backtrack(int m,int n,int k,int[][] visit,int i,int j) {
        if(visit[i][j]==0) {
            if(toSum(i, j)<=k) {
                count=count+1;
                visit[i][j]=1;
                if(i>0) {
                    backtrack(m, n, k, visit, i-1, j);
                }
                if(i<m-1) {
                    backtrack(m, n, k, visit, i+1, j);
                }
                if(j>0) {
                    backtrack(m, n, k, visit, i, j-1);
                }
                if(j<n-1) {
                    backtrack(m, n, k, visit, i, j+1);
                }
            }
        }
    }
    
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        offer_13 off=new offer_13();
        System.out.println(off.movingCount(2, 3, 1));
    }

}

 

posted on 2022-03-15 11:43  一仟零一夜丶  阅读(20)  评论(0)    收藏  举报