机器人可到达的总格数


    public int movingCount(int threshold, int rows, int cols)
    { //边界条件
    	if(rows <= 0||cols <= 0||threshold < 0)
    		return 0;
    	int[] num = {0};//保存可以到达的总格数
        boolean[] visit = new boolean[rows*cols];//访问过的位置进行标记
        countCore( threshold, rows,cols,0,0,num, visit);
        return num[0];       	
    }
    private void countCore(int threshold,int rows,int cols,int r,int c,int[] num,boolean visit[]){
    	if(r>=0 && r < rows && c>=0 && c<cols && !visit[r*cols+c] && isSumBigThanK(r,c,threshold))
    	{
    		num[0]++;
    		visit[r*cols+c]=true;
    		countCore(threshold, rows,cols,r+1,c, num,visit);//向上移动
    		countCore(threshold,  rows,cols,r-1,c, num,visit);//向下移动
    		countCore(threshold,  rows,cols,r,c+1, num,visit);//向右移动
    		countCore(threshold,  rows,cols,r,c-1, num,visit);//向左移动
    	}
    } 
    //该方法用来比较两个数的按位和是否超过阈值
    private boolean isSumBigThanK(int r,int c,int k){
    	int num = 0;//保存总和
    	while(r!=0){
    		num+=r%10;
    		r/=10;		
    	}
    	while(c!=0){
    		num+=c%10;
    		c /=10;   				
    	}
    	if(num<=k)
    		return true;
    	return false;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值