5911. 模拟行走机器人 II
生活随笔
收集整理的這篇文章主要介紹了
5911. 模拟行走机器人 II
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
5911. 模擬行走機(jī)器人 II
給你一個(gè)在 XY 平面上的 width x height 的網(wǎng)格圖,左下角 的格子為 (0, 0) ,右上角 的格子為 (width - 1, height - 1) 。網(wǎng)格圖中相鄰格子為四個(gè)基本方向之一(“North”,“East”,“South” 和 “West”)。一個(gè)機(jī)器人 初始 在格子 (0, 0) ,方向?yàn)?“East” 。
機(jī)器人可以根據(jù)指令移動(dòng)指定的 步數(shù) 。每一步,它可以執(zhí)行以下操作。
沿著當(dāng)前方向嘗試 往前一步 。
如果機(jī)器人下一步將到達(dá)的格子 超出了邊界 ,機(jī)器人會(huì) 逆時(shí)針 轉(zhuǎn) 90 度,然后再嘗試往前一步。
如果機(jī)器人完成了指令要求的移動(dòng)步數(shù),它將停止移動(dòng)并等待下一個(gè)指令。
請(qǐng)你實(shí)現(xiàn) Robot 類:
- Robot(int width, int height) 初始化一個(gè) width x height 的網(wǎng)格圖,機(jī)器人初始在 (0, 0) ,方向朝 “East” 。
- void move(int num) 給機(jī)器人下達(dá)前進(jìn) num 步的指令。
- int[] getPos() 返回機(jī)器人當(dāng)前所處的格子位置,用一個(gè)長(zhǎng)度為 2 的數(shù)組 [x, y] 表示。
- String getDir() 返回當(dāng)前機(jī)器人的朝向,為 “North” ,“East” ,“South” 或者 “West” 。
提示:
- 2 <= width, height <= 100
- 1 <= num <= 10510^5105
- move ,getPos 和 getDir 總共 調(diào)用次數(shù)不超過 10410^4104 次。
解題思路
模擬機(jī)器人在外圈的移動(dòng),使用x,y維護(hù)機(jī)器人當(dāng)前所在的位置,每次移動(dòng)時(shí)判斷機(jī)器人是否會(huì)移出邊界,如果會(huì)出界,就改變移動(dòng)方向
代碼
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();*/總結(jié)
以上是生活随笔為你收集整理的5911. 模拟行走机器人 II的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2025. 分割数组的最多方案数
- 下一篇: 677. 键值映射