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” 。
示例 1:輸入:
["Robot", "move", "move", "getPos", "getDir", "move", "move", "move", "getPos", "getDir"]
[[6, 3], [2], [2], [], [], [2], [1], [4], [], []]
輸出:
[null, null, null, [4, 0], "East", null, null, null, [1, 2], "West"]解釋:
Robot robot = new Robot(6, 3); // 初始化網格圖,機器人在 (0, 0) ,朝東。
robot.move(2);  // 機器人朝東移動 2 步,到達 (2, 0) ,并朝東。
robot.move(2);  // 機器人朝東移動 2 步,到達 (4, 0) ,并朝東。
robot.getPos(); // 返回 [4, 0]
robot.getDir(); // 返回 "East"
robot.move(2);  // 朝東移動 1 步到達 (5, 0) ,并朝東。// 下一步繼續往東移動將出界,所以逆時針轉變方向朝北。// 然后,往北移動 1 步到達 (5, 1) ,并朝北。
robot.move(1);  // 朝北移動 1 步到達 (5, 2) ,并朝 北 (不是朝西)。
robot.move(4);  // 下一步繼續往北移動將出界,所以逆時針轉變方向朝西。// 然后,移動 4 步到 (1, 2) ,并朝西。
robot.getPos(); // 返回 [1, 2]
robot.getDir(); // 返回 "West"

提示:

  • 2 <= width, height <= 100
  • 1 <= num <= 10510^5105
  • move ,getPos 和 getDir 總共 調用次數不超過 10410^4104 次。

解題思路

模擬機器人在外圈的移動,使用x,y維護機器人當前所在的位置,每次移動時判斷機器人是否會移出邊界,如果會出界,就改變移動方向

  1. 當移動步數超出外圈周長時,說明這次移動會超過一圈,所以我們可以將其對外圈周長取模,來獲取其實際移動的距離。如果取模的結果等于0的話,說明會跑回原點,但是可能存在特殊情況,就是起始位置的下一步就是邊界點的情況,跑完一圈以后方向可能會改變,因此我們需要對取模結果進行判斷,如果取模等于0,我們需要將結果置為外圈的長度。

代碼

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();*/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/389784.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/389784.shtml
英文地址,請注明出處:http://en.pswp.cn/news/389784.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自定義按鈕動態變化_新聞價值的變化定義

自定義按鈕動態變化I read Bari Weiss’ resignation letter from the New York Times with some perplexity. In particular, I found her claim that she “was hired with the goal of bringing in voices that would not otherwise appear in your pages” a bit strange: …

Linux記錄-TCP狀態以及(TIME_WAIT/CLOSE_WAIT)分析(轉載)

1.TCP握手定理 2.TCP狀態 l CLOSED&#xff1a;初始狀態&#xff0c;表示TCP連接是“關閉著的”或“未打開的”。 l LISTEN &#xff1a;表示服務器端的某個SOCKET處于監聽狀態&#xff0c;可以接受客戶端的連接。 l SYN_RCVD &#xff1a;表示服務器接收到了來自客戶端請求…

677. 鍵值映射

677. 鍵值映射 實現一個 MapSum 類&#xff0c;支持兩個方法&#xff0c;insert 和 sum&#xff1a; MapSum() 初始化 MapSum 對象 void insert(String key, int val) 插入 key-val 鍵值對&#xff0c;字符串表示鍵 key &#xff0c;整數表示值 val 。如果鍵 key 已經存在&am…

算法 從 數中選出_算法可以選出勝出的nba幻想選秀嗎

算法 從 數中選出Note from Towards Data Science’s editors: While we allow independent authors to publish articles in accordance with our rules and guidelines, we do not endorse each author’s contribution. You should not rely on an author’s works without …

jQuery表單校驗

小小Demo&#xff1a; <script>$(function () {//給username綁定失去焦點事件$("#username").blur(function () {//得到username文本框的值var nameValue $(this).val();//每次清除數據$("table font:first").remove();//校驗username是否合法if (n…

5912. 每一個查詢的最大美麗值

5912. 每一個查詢的最大美麗值 給你一個二維整數數組 items &#xff0c;其中 items[i] [pricei, beautyi] 分別表示每一個物品的 價格 和 美麗值 。 同時給你一個下標從 0 開始的整數數組 queries 。對于每個查詢 queries[j] &#xff0c;你想求出價格小于等于 queries[j] …

django-rest-framework第一次使用使用常見問題

2019獨角獸企業重金招聘Python工程師標準>>> 記錄在第一次使用django-rest-framework框架使用時遇到的問題&#xff0c;為了便于理解在這里創建了Person和Grade這兩個model from django.db import models class Person(models.Model):SHIRT_SIZES ((S, Small),(M, …

插入腳注把腳注標注刪掉_地獄司機不應該只是英國電影歷史數據中的腳注,這說明了為什么...

插入腳注把腳注標注刪掉Cowritten by Andie Yam由安迪(Andie Yam)撰寫 Hell Drivers”, 1957地獄司機 》電影海報 Data visualization is a great way to celebrate our favorite pieces of art as well as reveal connections and ideas that were previously invisible. Mor…

vue之axios 登陸驗證及數據獲取

登陸驗證&#xff0c;獲取token methods:{callApi () {var vm thisvm.msg vm.result //驗證地址vm.loginUrl http://xxx///查詢地址vm.apiUrl http://yyy/vm.loginModel {username: 你的用戶名,password: 你的密碼,// grant_type: password,}//先獲取 tokenaxios.post(v…

5926. 買票需要的時間

5926. 買票需要的時間 有 n 個人前來排隊買票&#xff0c;其中第 0 人站在隊伍 最前方 &#xff0c;第 (n - 1) 人站在隊伍 最后方 。 給你一個下標從 0 開始的整數數組 tickets &#xff0c;數組長度為 n &#xff0c;其中第 i 人想要購買的票數為 tickets[i] 。 每個人買票…

貝葉斯統計 傳統統計_統計貝葉斯如何補充常客

貝葉斯統計 傳統統計For many years, academics have been using so-called frequentist statistics to evaluate whether experimental manipulations have significant effects.多年以來&#xff0c;學者們一直在使用所謂的常客統計學來評估實驗操作是否具有significant效果。…

吳恩達機器學習+林軒田機器學習+高等數學和線性代數等視頻領取

機器學習一直是一個熱門的領域。這次小編應大家需求&#xff0c;整理了許多相關學習視頻和書籍。本次分享包含&#xff1a;臺灣大學林軒田老師的【機器學習基石】和【機器學習技法】視頻教學、吳恩達老師的機器學習分享、徐小湛的高等數學和線性代數視頻&#xff0c;還有相關機…

saltstack二

配置管理 haproxy的安裝部署 haproxy各版本安裝包下載路徑https://www.haproxy.org/download/1.6/src/&#xff0c;跳轉地址為http&#xff0c;改為https即可 創建相關目錄 # 創建配置目錄 [rootlinux-node1 ~]# mkdir /srv/salt/prod/pkg/ [rootlinux-node1 ~]# mkdir /srv/sa…

319. 燈泡開關

319. 燈泡開關 初始時有 n 個燈泡處于關閉狀態。第一輪&#xff0c;你將會打開所有燈泡。接下來的第二輪&#xff0c;你將會每兩個燈泡關閉一個。 第三輪&#xff0c;你每三個燈泡就切換一個燈泡的開關&#xff08;即&#xff0c;打開變關閉&#xff0c;關閉變打開&#xff0…

如何生成隨機不重復的11位數字

要求 不重復隨機11位數字不占存儲我們都知道11位數字(random)對應有最大值max和最小值min99999999999和10000000000.很簡單的從最小值開始按順序分發到最大值&#xff0c;就滿足了不重復&#xff0c;不占存儲&#xff0c;11位數字的特性。那么接下來就要考慮如何生成隨機數字這…

因為你的電腦安裝了即點即用_即你所愛

因為你的電腦安裝了即點即用Data visualization is a great way to celebrate our favorite pieces of art as well as reveal connections and ideas that were previously invisible. More importantly, it’s a fun way to connect things we love — visualizing data and …

關于前端緩存問題

Cookie、localStorage、sessionStorage的異同 之前沒怎接觸過前端緩存&#xff0c;請教了前端同事之后他給我粘了幾行代碼&#xff0c;用localStorage存取信息&#xff0c;后來老大review代碼的時候發現&#xff0c;被批了一頓&#xff0c;現在好好看看這幾個前端緩存的區別&am…

2074. 反轉偶數長度組的節點

2074. 反轉偶數長度組的節點 給你一個鏈表的頭節點 head 。 鏈表中的節點 按順序 劃分成若干 非空 組&#xff0c;這些非空組的長度構成一個自然數序列&#xff08;1, 2, 3, 4, …&#xff09;。一個組的 長度 就是組中分配到的節點數目。換句話說&#xff1a; 節點 1 分配給…

阿里云云服務器硬盤分區及掛載

云服務器環境&#xff1a;CentOS 6.2 64位 客戶端環境&#xff1a;Mac OSX 遠程連接方式&#xff1a;運行 Terminal&#xff0c;輸入命令 ssh usernameip 硬盤分區及掛載操作步驟&#xff1a; 查看未掛載的硬盤&#xff08;名稱為/dev/xvdb&#xff09;fdisk -l Disk /dev/xvdb…

團隊管理新思考_需要一個新的空間來思考討論和行動

團隊管理新思考andrew wong安德魯黃 Follow跟隨 Sep 4 九月4 There is a need for a new space to think, discuss, and act. This need are being felt by the majority of AI / ML / Data Product Managers out there. They are exhausted by the ever increasing data volum…