码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Leetcode】2069. Walking Robot Simulation II


    题目地址:

    https://leetcode.com/problems/walking-robot-simulation-ii/description/

    给定一个 w × h w\times h w×h的二维矩阵,一个机器人位于左下角 ( 0 , 0 ) (0,0) (0,0)的位置,右上角的位置是 ( w − 1 , h − 1 ) (w-1, h-1) (w−1,h−1)。这个机器人一开始方向向东,要求实现下面的操作:
    1、以 w , h w,h w,h初始化;
    2、移动机器人 x x x步,机器人除非走到边界之外,否则方向不变;如果走到边界之外,则走到边界的时候需要逆时针转向 90 ° 90\degree 90°然后走剩余的步数;
    3、返回机器人位置;
    4、返回机器人朝向。

    首先,机器人无论在哪儿,其走 x x x步等价于走 x m o d    [ ( w + h − 2 ) ∗ 2 ] x\mod [(w+h-2)*2] xmod[(w+h−2)∗2]步,所以可以先让 x x x取模,取模完毕之后剩余步数暴力模拟即可。需要注意一个特殊情况,如果机器人从未走过,其朝向是东,但是一旦其走过,在其回到 ( 0 , 0 ) (0,0) (0,0)的时候,朝向是南。其余的情况都可以直接模拟。代码如下:

    class Robot {
     public:
      int X, Y, dir;
      string direction[4] = {"East", "North", "West", "South"};
      int x, y;
      int dx[4] = {1, 0, -1, 0};
      int dy[4] = {0, 1, 0, -1};
      bool moved = false;
    
      Robot(int width, int height) {
        X = width;
        Y = height;
        x = y = dir = 0;
      }
    
      void step(int num) {
        moved = true;
        num %= (X - 1 + Y - 1) * 2;
        while (num) {
          int nx = x + dx[dir] * num, ny = y + dy[dir] * num;
          if (nx < 0 || nx >= X || ny < 0 || ny >= Y) {
            // 出界了,要转向
            dir = (dir + 1) % 4;
            if (nx < 0) num -= x, x = 0;
            else if (nx >= X) num -= X - 1 - x, x = X - 1;
            else if (ny < 0) num -= y, y = 0;
            else num -= Y - 1 - y, y = Y - 1;
          } else {
            // 没出界,则(nx, ny)即为新位置
            x = nx, y = ny;
            return;
          }
        }
      }
    
      vector<int> getPos() { return {x, y}; }
    
      string getDir() {
        // 如果走过,回到了原点,方向是南
        if (moved && !x && !y) return direction[3];
        return direction[dir];
      }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    所有操作时间复杂度 O ( 1 ) O(1) O(1),空间 O ( 1 ) O(1) O(1)。

  • 相关阅读:
    Efficient Shapelet Discovery for Time Series Classification(TKDE)
    Java零基础入门-位运算符
    元素跟随鼠标移动
    2024年的后端和Web开发趋势
    前端面试,备考第 14 天 - 指向问题:this/call/apply/bind
    什么是媒体见证?媒体宣传有哪些好处?
    数字电路与逻辑设计 之 卡诺图
    speedpdf怎么免费合并多个pdf
    python基础-数据结构——hash表、线性探测、二重探测、双重哈希、闭散列(分离链接)(拉链法)Python代码实现
    抖音矩阵系统,抖音矩阵系统源码。抖音SEO源码。
  • 原文地址:https://blog.csdn.net/qq_46105170/article/details/128146797
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号