sponsored links

leetcode2069_go_模擬行走機器人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 <= 105

move ,getPos 和 getDir 總共 呼叫次數不超過 104 次。

解題思路分析

1、模擬;時間複雜度O(n),空間複雜度O(1)

leetcode2069_go_模擬行走機器人II

var m = map[int]string{0: "East", 1: "North", 2: "West", 3: "South"}
var dx = []int{1, 0, -1, 0}
var dy = []int{0, 1, 0, -1}

type Robot struct {
   w, h, x, y, dir, total int
}

func Constructor(width int, height int) Robot {
   return Robot{w: width, h: height, total: 2*width + 2*height - 4}
}

func (this *Robot) Step(num int) {
   num = num % this.total
   if num == 0 && this.x == 0 && this.y == 0 && this.dir == 0 {
      this.dir = 3 // 注意特判
   }
   for ; num > 0; num-- {
      newX, newY := this.x+dx[this.dir], this.y+dy[this.dir]
      if 0 <= newX && newX < this.w && 0 <= newY && newY < this.h {
         this.x = newX
         this.y = newY
      } else {
         this.dir = (this.dir + 1) % 4
         this.x = this.x + dx[this.dir]
         this.y = this.y + dy[this.dir]
      }
   }
}

func (this *Robot) GetPos() []int {
   return []int{this.x, this.y}
}

func (this *Robot) GetDir() string {
   return m[this.dir%4]
}

2、預處理;時間複雜度O(n),空間複雜度O(n)

var m = map[int]string{0: "East", 1: "North", 2: "West", 3: "South"}

type Robot struct {
   arr    [][2]int
   dir    []int
   isMove bool
   index  int
}

func Constructor(width int, height int) Robot {
   arr := make([][2]int, 0)
   dir := make([]int, 0)
   for i := 0; i < width; i++ {
      arr = append(arr, [2]int{i, 0})
      dir = append(dir, 0)
   }
   for i := 1; i < height; i++ {
      arr = append(arr, [2]int{width - 1, i})
      dir = append(dir, 1)
   }
   for i := width - 2; i >= 0; i-- {
      arr = append(arr, [2]int{i, height - 1})
      dir = append(dir, 2)
   }
   for i := height - 2; i > 0; i-- {
      arr = append(arr, [2]int{0, i})
      dir = append(dir, 3)
   }
   dir[0] = 3 // 第0個朝南
   return Robot{arr: arr, dir: dir, isMove: false}
}

func (this *Robot) Step(num int) {
   this.isMove = true
   this.index = (this.index + num) % len(this.arr)
}

func (this *Robot) GetPos() []int {
   return []int{this.arr[this.index][0], this.arr[this.index][1]}
}

func (this *Robot) GetDir() string {
   if this.isMove == false {
      return "East"
   }
   return m[this.dir[this.index]]
}

總結

Medium題目,可以先預處理成陣列計算,也可以模擬計算,但是要注意第一個點的方向

分類: 科學
時間: 2021-12-23

相關文章

高一物理差,學不會怎麼辦?方法如下
要想學好高一物理首先得增加幾個知識點:1,直線的傾斜角:一條直線向上的方向與x軸正向的夾角叫這條直線的傾斜角.x軸和與x軸平行的直線,傾斜角為0度.2,三角函式的定義:sina=對邊比斜邊=y比r:c ...

底盤緊 轉向精 場地試駕R汽車MARVEL R

底盤緊 轉向精 場地試駕R汽車MARVEL R
R汽車MARVEL R?對於這樣一個命名頗像"繞口令"的車型,多數人會感到陌生.但如果我要提到上海車展裡C位的那張周董海報的話,是不是立馬就有點印象了?沒錯,就是它. 活動之前,@ ...

真實故事||結婚17年,我在成都叫了個外賣,15分鐘後,天塌下來

真實故事||結婚17年,我在成都叫了個外賣,15分鐘後,天塌下來
大家好,我是寫真實故事的豬小淺.跟著我,一起來看今天的故事: 01 2021年4月初的時候. 我打電話給我爸,說長假回老家. 他說,哦,我還以為你們也要出門呢,你弟兩口子要去新疆玩. 我說,想你了,回 ...

追尾後遇到了愛情
路檸在路上追尾了一輛特警車 看著車上下來的帥哥 突然覺得這尾追的值! -----以下正文 路檸在上班路上追尾了. 準確的來說,是她追尾了一輛黑色特警車. 自己車剮蹭她倒無所謂,眼前這車掉片漆她得賠多少 ...

「綜訓神器」Adizero boston 10 25km詳測

「綜訓神器」Adizero boston 10 25km詳測
選鞋&簡介 這個過程極其痛苦,作為一名理工科出生,小紅書是啥?抖音是啥?帶貨是不可能帶的,這輩子都不可能. 什麼樣的鞋適合現階段的自己呢?現階段的自己是什麼段位呢?未來一段時期會有多大提升?這 ...

慶豐街 | 山惠明

慶豐街 | 山惠明
來源:嘉興日報-嘉興線上 慶豐街 攝影 山惠明 王店,不是一家店,是一座千年古鎮.長水塘悠悠,由南至北,貫穿整個古鎮. 在長水塘畔,有一條長長的老街.老底子,王店老百姓習慣以塘橋為界,塘橋以南稱南塘街 ...

氣場太強!挑戰者全時4驅越野房車!C本可開!車內遊艇佈局住著爽​

氣場太強!挑戰者全時4驅越野房車!C本可開!車內遊艇佈局住著爽​
說起用房車在戈壁沙漠越野自駕,對於使用車型的話,那第一想到的肯定是阿莫迪羅房車了,對於這個品牌旗下的各類車型,可以說都具有強力的越野性以及超高的生活舒適性!尤其是喜歡玩越野,又講究生活的人,更傾向此類 ...

比哈弗H6帥氣,起步181匹馬力,頂配不到14W,實拍榮威RX5 PLUS

比哈弗H6帥氣,起步181匹馬力,頂配不到14W,實拍榮威RX5 PLUS
如果問起國產緊湊型SUV最有知名度的車型,我想在座的各位都會不約而同想到哈弗H6.要知道,在中國品牌還沒有崛起的時期,大眾途觀.本田CR-V.豐田RAV4榮放可是緊湊型SUV細分市場的銷量霸主.有著合 ...

郭沫若用4字罵魯迅,魯迅加1字回懟,道出了郭沫若一生

郭沫若用4字罵魯迅,魯迅加1字回懟,道出了郭沫若一生
綜述 一位是中國新詩的奠基人,一位是中國現代文化的奠基人,郭沫若和魯迅兩位文學巨匠似乎天生就是一對天敵,他們不僅擅長的文學領域不同,就連性子脾氣也不互相不對付. 郭沫若風流成性是人盡皆知,這麼多年誰也 ...

《我們的歌》第三季首播,四大看點情懷拉滿,齊秦林子祥不負眾望

《我們的歌》第三季首播,四大看點情懷拉滿,齊秦林子祥不負眾望
9月19日晚間,音樂綜藝節目<我們的歌>第三季首期在東方衛視開播.第三季首發陣容,邀請到了樂壇老前輩林子祥.齊秦等人,更是有楊千嬅.薛之謙等歌手坐鎮.張碧晨.胡夏.周興哲.楊芸晴.錘娜麗莎 ...

白羊星座、獅子星座、射手星座本週運勢

白羊星座、獅子星座、射手星座本週運勢
重點參考:太陽星座.上升星座 白羊座 溫馨提示:星座運勢只是參考,熱愛生活 好運加倍. 白羊座本週可以利用閒暇稍作休息.調整. 感情方面,白羊座的一些以前潛藏的.深 刻的感情和情緒會開始展現出來,你會 ...

北京6家小眾公園&amp;周邊吃喝不完全指南,重拾兒時的美好與神仙級美味

北京6家小眾公園&amp;周邊吃喝不完全指南,重拾兒時的美好與神仙級美味
美好的帝都初秋,正是去公園裡放空的好時節.不過這一次,我們想聊的並不是像景山.北海.奧森.朝陽公園這些大家耳熟能詳的地方,而是分佈在北京城區裡的一些相對不太知名的小眾公園. 它們中的大多數,並不以面積 ...

為什麼皮爾斯喜歡到處黑詹姆斯?看了他們69次交手的資料,你就懂

為什麼皮爾斯喜歡到處黑詹姆斯?看了他們69次交手的資料,你就懂
很多球迷一直都覺得皮爾斯無論在任何地方都是喜歡黑詹姆斯的,那麼為什麼皮爾斯一直對詹姆斯不友好呢?我們來看看兩個人的生涯69次交手的資料或許你就知道,詹姆斯場均拿到29.3+6.7+6.5,皮爾斯場均2 ...

轉載:思路縝密的老師
發信人: Math2021 (我是Sunyata的新ID!), 信區: Joke 標 題: 思路縝密的老師 z 發信站: 水木社群 (Sun Sep 19 09:02:25 2021), 站內 差不多 ...

孩子腦子聰不聰明,從哪門學科成績能看出來?資深教師說出實情

孩子腦子聰不聰明,從哪門學科成績能看出來?資深教師說出實情
從學生上學開始,學生就不斷在經歷腦力的測試,當然這個測試的方法就是考試,學生進行考試不光是對學生的知識進行鞏固,同時還能鍛鍊學生的智商,因此家長和教師看中學生的成績也不足為奇. 很多家長都認為學生的智 ...

故事:一味掩蓋問題的家庭,反而成了傷害孩子的兇器

故事:一味掩蓋問題的家庭,反而成了傷害孩子的兇器
2021年5月的一天. 傍晚6點多,徐芬忽然接到一個陌生號碼打來的電話. 聽聲音,是個很年輕的男生. 他說,阿姨,您是郝辰旭的媽媽嗎? 徐芬說,是啊,你是-- 男生說,您在哪兒呢?能不能馬上回家看看郝 ...

懸墜釣主線長於、等於、小於竿長!有何利弊?如何實戰應用

懸墜釣主線長於、等於、小於竿長!有何利弊?如何實戰應用
垂釣是一個非常古老的運動,姜子牙無鉤釣法!釣出一個王朝.發展到現代,垂釣方法眾多!淡水垂釣熱門的幾種釣法:懸墜釣.傳統釣法.路亞釣法.飛蠅釣法.拋竿釣法.筏釣(橋筏釣)等等釣法眾多,應對的目標魚有相同 ...

專訪伊布:沒有歐冠,沒有金球?我沒有遺憾

專訪伊布:沒有歐冠,沒有金球?我沒有遺憾
迴歸米蘭,迴歸球場,迴歸最好的自己--步入不惑之年的伊布拉希莫維奇,依然在書寫著輝煌的職業生涯.回憶過去,瑞典神塔躊躇滿志:展望未來,紅黑前鋒戰意昂揚! 追逐"更好" FF 最終, ...

Netflix9月人氣最高的10部電視劇,火爆韓劇《魷魚遊戲》未進前三

Netflix9月人氣最高的10部電視劇,火爆韓劇《魷魚遊戲》未進前三
最近一段時間,估計大家都被一部叫<魷魚遊戲>的電視劇刷屏了,<魷魚遊戲>是由Netflix投資拍攝的,雖是一部韓劇,但卻在全世界範圍內掀起了一股大逃殺的熱潮.這劇雖然熱度奇高, ...

建議用陰瑜伽的方法解決失眠,親測有效

建議用陰瑜伽的方法解決失眠,親測有效
前幾天有朋友在公眾號留言,說最近失眠能不能推薦一些陰瑜伽的課程,想嘗試一下看看陰瑜伽是否能夠解決自己的睡眠問題.就這個問題特別想聊幾句. 我剛開始練習瑜伽的時候,是跟著慧蘭和於戈兩位老師的影片練的(我 ...