5911. 模拟行走机器人 II
生活随笔
收集整理的這篇文章主要介紹了
5911. 模拟行走机器人 II
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
5911. 模擬行走機器人 II
給你一個在 XY 平面上的 width x height 的網格圖,左下角 的格子為 (0, 0) ,右上角 的格子為 (width - 1, height - 1) 。網格圖中相鄰格子為四個基本方向之一(“North”,“East”,“South” 和 “West”)。一個機器人 初始 在格子 (0, 0) ,方向為 “East” 。
機器人可以根據指令移動指定的 步數 。每一步,它可以執行以下操作。
沿著當前方向嘗試 往前一步 。
如果機器人下一步將到達的格子 超出了邊界 ,機器人會 逆時針 轉 90 度,然后再嘗試往前一步。
如果機器人完成了指令要求的移動步數,它將停止移動并等待下一個指令。
請你實現 Robot 類:
- Robot(int width, int height) 初始化一個 width x height 的網格圖,機器人初始在 (0, 0) ,方向朝 “East” 。
- void move(int num) 給機器人下達前進 num 步的指令。
- int[] getPos() 返回機器人當前所處的格子位置,用一個長度為 2 的數組 [x, y] 表示。
- String getDir() 返回當前機器人的朝向,為 “North” ,“East” ,“South” 或者 “West” 。
提示:
- 2 <= width, height <= 100
- 1 <= num <= 10510^5105
- move ,getPos 和 getDir 總共 調用次數不超過 10410^4104 次。
解題思路
模擬機器人在外圈的移動,使用x,y維護機器人當前所在的位置,每次移動時判斷機器人是否會移出邊界,如果會出界,就改變移動方向
代碼
class Robot { public:int dir[4][2] = {{0, 1},{1, 0},{0, -1},{-1, 0 }};string name[4] = {"East", "North", "West", "South"};int x=0,y=0,idx=0,round;int row,col;Robot(int width, int height) {this->row=height;this->col=width;this->round=2*(height+width)-4;}bool is_valid(int x,int y){return x>=0&&x<row&&y>=0&&y<col;}void move(int num) {num%=round;if(num==0) num=round;for (int i = 0; i < num; ++i) {int nx=x+dir[idx][0],ny=y+dir[idx][1];if (!is_valid(nx,ny)){idx++;idx%=4;}x+=dir[idx][0],y+=dir[idx][1];}}vector<int> getPos() {return {y,x};}string getDir() {return name[idx];} };/*** Your Robot object will be instantiated and called as such:* Robot* obj = new Robot(width, height);* obj->move(num);* vector<int> param_2 = obj->getPos();* string param_3 = obj->getDir();*/總結
以上是生活随笔為你收集整理的5911. 模拟行走机器人 II的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2025. 分割数组的最多方案数
- 下一篇: 老公梦到蛇是怀男孩还是女孩