当前位置: 首页 > news >正文

66 机器人的运动范围

题目描述

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?
 
思路:利用一个访问数组,以及访问的位置就设置为true,结合一个判断合法的if语句,不合法的情况就返回0,相当于可以回退,找到所有可以到达的位置
 
class Solution {
public:
    bool isvalid(int threshold,int x,int y){
        int sum = 0;
        while(x != 0){
            sum += x % 10;
            x = x / 10;
        }
        while(y != 0){
            sum += y % 10;
            y = y / 10;
        }
        if(sum > threshold){
            return false;
        }
        return true;
    }
    
    int helper(int threshold, int rows, int cols,vector<bool> &visited,int startx,int starty){
        if(startx < 0 || starty < 0 || startx >= rows || starty >= cols || !isvalid(threshold,startx,starty) || visited[startx * cols + starty]){
            return 0;//不合法的情况,有加1减一,所以要和0以及上限比较
        }
        visited[startx * cols + starty] = true;//访问的位置设置为已访问,这样判断不合法的时候,下次就返回0,不会重复计算
        return helper(threshold,rows,cols,visited,startx,starty - 1) +
               helper(threshold,rows,cols,visited,startx,starty + 1) +
               helper(threshold,rows,cols,visited,startx - 1,starty) +
               helper(threshold,rows,cols,visited,startx + 1,starty) + 1;//上下左右访问,进入到这里的说明可以加1(之前没访问)
            
    }
    
    int movingCount(int threshold, int rows, int cols){
       if(threshold <= 0 || rows <= 0 || cols <= 0){ 
           return 0;
       }
       int res = 0;
       vector<bool> visited(rows * cols,false);
       res = helper(threshold,rows,cols,visited,0,0);
       return res;        
    }
};

 

转载于:https://www.cnblogs.com/dingxiaoqiang/p/8482204.html

相关文章:

  • ZOJ 2110 Tempter of the Bone DFS搜索+奇偶剪枝
  • mysql myisam存储引擎关于锁的3个参数
  • 【Android】ListView中getView的原理与解决多轮重复调用的方法
  • oracle利用触发器实现主键字段自增
  • 函数的重写
  • wx入门(一)
  • ZOJ 1649 Rescue BFS水题
  • Linux 性能分析的前 60 秒
  • C++继承体系下类中属性的能见度总结
  • 案例45-crm练习改写客户列表使用struts2OGNL
  • ZOJ 2913 Bus Pass BFS水题
  • 内置函数——format
  • POJ 1465 Multiple BFS
  • Jenkins之Linux和window配置区别
  • POJ Holedox Moving BFS hash判重
  • 2019.2.20 c++ 知识梳理
  • Docker入门(二) - Dockerfile
  • Flex布局到底解决了什么问题
  • JavaScript 一些 DOM 的知识点
  • JavaScript的使用你知道几种?(上)
  • Mysql5.6主从复制
  • SOFAMosn配置模型
  • ucore操作系统实验笔记 - 重新理解中断
  • 包装类对象
  • 分享几个不错的工具
  • 工程优化暨babel升级小记
  • 前端性能优化——回流与重绘
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 树莓派 - 使用须知
  • 我看到的前端
  • 协程
  • 自动记录MySQL慢查询快照脚本
  • 积累各种好的链接
  • ​卜东波研究员:高观点下的少儿计算思维
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #我与Java虚拟机的故事#连载11: JVM学习之路
  • (JS基础)String 类型
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (未解决)macOS matplotlib 中文是方框
  • (转)EXC_BREAKPOINT僵尸错误
  • **PHP二维数组遍历时同时赋值
  • .cn根服务器被攻击之后
  • .NET CLR Hosting 简介
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .Net中wcf服务生成及调用
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗