zoukankan      html  css  js  c++  java
  • 68.机器人的运动范围

    题目描述:

      地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。
      例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?

    思路分析:

      从坐标(0,0)开始递归遍历,在遍历的过程中判断该节点坐标是否满足要求,并且不能重复访问,所以需要设置一个标价数组,来标记节点是否访问过。

    代码:

    public class Solution {
        public int movingCount(int threshold, int rows, int cols)
        {
            boolean []flag=new boolean[rows*cols] ;
            return count(threshold,rows,cols,0,0,flag);
        }
        public int count(int threshold,int rows,int cols,int i,int j,boolean[]flag){
            if(i<0||i>=rows||j<0||j>=cols)
                return 0;
            int index=i*cols+j;
            if(flag[index]||checkSum(i,j,threshold))
                return 0;
            flag[index]=true;
            return 1+count(threshold,rows,cols,i+1,j,flag)+count(threshold,rows,cols,i-1,j,flag)+count(threshold,rows,cols,i,j+1,flag)+count(threshold,rows,cols,i,j-1,flag);
        }
        public boolean checkSum(int i,int j,int threshold){
            int sum=0;
            while(i>0){
                sum=sum+(i%10);
                i=i/10;
            }
            while(j>0){
                sum=sum+(j%10);
                j=j/10;
            }
            if(sum>threshold)
                return true;
            else
                return false;
        }
    }
    
  • 相关阅读:
    squid代理缓存服务
    部署网络存储ISCSI
    电子邮局系统
    使用DHCP动态管理主机地址
    vsftp -samba-autofs
    python初学 | 循环for while
    python初学 | 条件语句if
    python初学 | set
    python初学 | 字典dictionary
    python初学 | 元组tuple
  • 原文地址:https://www.cnblogs.com/yjxyy/p/10962675.html
Copyright © 2011-2022 走看看