模擬應用: 順時針迴旋路徑 Spiral Matrix III_Leetcode #885

閱讀時間約 5 分鐘

題目敘述:

給定一個二維陣列的高與寬,並且給定起點位置座標。

請從起點位置開始順時針拜訪陣列元素,並且把沿路走過的座標記錄下來。

以陣列的形式返回答案。


測試範例

Example 1:

raw-image
Input: rows = 1, cols = 4, rStart = 0, cStart = 0
Output: [[0,0],[0,1],[0,2],[0,3]]


Example 2:

raw-image
Input: rows = 5, cols = 6, rStart = 1, cStart = 4
Output: [[1,4],[1,5],[2,5],[2,4],[2,3],[1,3],[0,3],[0,4],[0,5],[3,5],[3,4],[3,3],[3,2],[2,2],[1,2],[0,2],[4,5],[4,4],[4,3],[4,2],[4,1],[3,1],[2,1],[1,1],[0,1],[4,0],[3,0],[2,0],[1,0],[0,0]]

約束條件

Constraints:

  • 1 <= rows, cols <= 100

陣列的高和寬都介於1~100之間。

  • 0 <= rStart < rows

起點的row一定是合法位置。

  • 0 <= cStart < cols

起點的column一定是合法位置。


演算法 模擬順時針走法

raw-image


順時針拜訪方向固定是往右,往下,往左,往上


初始step步伐為一步。


進入迴圈

接著往右step步,往下step步。

step 累加多一步

接著往左step步,往上step步。

step 累加多一步

...如此反覆循環,一直到拜訪所有陣列的格子點為止。


程式碼 模擬順時針走法

class Solution():

def spiralMatrixIII(self, R, C, r0, c0):

# path, initialized on starting point
path = [(r0, c0)]

is_valid = lambda row, col: 0 <= row < R and 0 <= col < C

# length of steps to move
steps = 1
r, c = r0, c0

# Keep walking until all grids are visited
while len(path) < R * C:

# Go east
for step in range(steps):
r, c = r, c + 1
if is_valid(r, c): path.append((r, c))

# Go down
for step in range(steps):
r, c = r + 1, c
if is_valid(r, c): path.append((r, c))

steps += 1

# Go west
for step in range(steps):
r, c = r, c - 1
if is_valid(r, c): path.append((r, c))

# Go north
for step in range(steps):
r, c = r - 1, c
if is_valid(r, c): path.append((r, c))

steps += 1

return path

複雜度分析

時間複雜度: O( Max{R, C}^2)

相當於以起點為圓心,邊長為半徑,以同心圓擴散,
順時針走的圖形,走的軌跡是一個回字型。
所需時間 = O( Max{R, C}^2) ~ (比較長的邊長)的平方


空間複雜度: O( R * C )

需要額外一個陣列去儲存走過的格子點,格子點總數 = 陣列大小 = R * C


Reference

[1]Spiral Matrix III - LeetCode

86會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!
題目敘述 Integer to English Words 給定一個整數num 請轉換成對應的的英文數字表達(One, Two, Three, ... 那種數字表達式)
題目敘述: 給定一個傳統手機鍵盤,如圖所示 接著給定一個字串word。 現在讓你重新安排每個字母的所在位置,每個字母可以重新安排到2~9這幾個鍵盤上的位置,每個字母限定只能選擇一個數字鍵去對應。 請問重新安排之後,最少要幾次按鍵才能輸出字串word?
題目敘述 Kth Distinct String in an Array 給定一個輸入陣列arr 和 參數k 請返回第k個出現恰好一次的陣列元素。
題目敘述 Make Two Arrays Equal by Reversing Subarrays 題目給定兩個輸入陣列,請問能否透過子陣列的反轉讓兩個陣列相等? 子陣列的反轉操作次數不受限制。 如果可以,返回True 如果不行,返回False
題目敘述 Number of Senior Citizens 給定一個旅客的車票字串陣列,美個字串的最後第四個和第三個數字代表旅客的年齡。 例如: XXX...XXX2015 代表旅客年齡為20歲。 總請計算共有多少位乘客的年齡 > 60 歲
題目要求計算兩個二進位字串的相加,並以字串的形式輸出。 字串內容只包含'0'或'1'字元。 複雜度分析 時間複雜度為O(m+n),空間複雜度為O(m+n)。
題目敘述 Integer to English Words 給定一個整數num 請轉換成對應的的英文數字表達(One, Two, Three, ... 那種數字表達式)
題目敘述: 給定一個傳統手機鍵盤,如圖所示 接著給定一個字串word。 現在讓你重新安排每個字母的所在位置,每個字母可以重新安排到2~9這幾個鍵盤上的位置,每個字母限定只能選擇一個數字鍵去對應。 請問重新安排之後,最少要幾次按鍵才能輸出字串word?
題目敘述 Kth Distinct String in an Array 給定一個輸入陣列arr 和 參數k 請返回第k個出現恰好一次的陣列元素。
題目敘述 Make Two Arrays Equal by Reversing Subarrays 題目給定兩個輸入陣列,請問能否透過子陣列的反轉讓兩個陣列相等? 子陣列的反轉操作次數不受限制。 如果可以,返回True 如果不行,返回False
題目敘述 Number of Senior Citizens 給定一個旅客的車票字串陣列,美個字串的最後第四個和第三個數字代表旅客的年齡。 例如: XXX...XXX2015 代表旅客年齡為20歲。 總請計算共有多少位乘客的年齡 > 60 歲
題目要求計算兩個二進位字串的相加,並以字串的形式輸出。 字串內容只包含'0'或'1'字元。 複雜度分析 時間複雜度為O(m+n),空間複雜度為O(m+n)。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
這是一部用與惡魔交合、嘔奶、吐血、地鐵流產等衝擊視覺畫面,包裝以成的婚姻故事。⠀沒什麼比看這一個大美人發瘋更令人著迷了,記得是在高中時看到法國國寶阿佳妮的神顏才(誤)點開過來看,原本以為是一部用犯罪和愛情的劇。
Thumbnail
你是否有發現過,當你想買車子的時候,考慮要買白色、黑色或是紅色時,如果你心裡有自己默默決定的答案,像是你其實你就是想買白色車子,這時在路上你會覺得,哇,原來白色的車子那麼多啊。 也許白色車子本來就很多,但因為你的注意力更注重在在白色車子上,因此產生了「視網膜效應」
…..夜幕來臨,未知的焦慮緊抓著我,只希望問題快速被解決的衝動在體內流竄著。「要不我們見個面在咖啡廳一起找房會比較快。」對方的提出我不疑有他,拿著電腦出了門…..
Thumbnail
隨著ChatGPT的出現,有許多科技業的專家甚至網路上的意見領袖,紛紛在測試與討論ChatGPT如何能應用於各種領域?媒體也再度提及類似有哪些工作未來會被人工智慧(AI)取代的論調。
Thumbnail
Web 3 行銷時代的新工具:NFTs — 從 Web 2 到 Web 3 的橋樑 商業目的 1. — 提高品牌知名度,擴大影響力 商業目的 2. — 創造新的體驗和專屬通行證 商業目的 3. — 投注社會公益以提高品牌忠誠度 鼓勵更多女性創作者加入的 NFTs 項目 — boohooverse
Thumbnail
Web 3- 所有權 ( Ownership)就是社群。每個 TA 都是實實在在參與社群的建構、打造社群共識的人。在 Web 3 世界裡的一個鏈上,可以是由多個不同 interest niche 社群所組成的,甚至每個社群之間有像小丑魚和海葵一樣不可分割、必須互利共生的關係存在。這一點是和 Web
Thumbnail
好消息是你又多了一條充滿紅利的虛擬溝通渠道,壞消息是沒有人能告訴你如何準確預估這裡的 ROAS 或合理化你的 ROI。It’s time to show your entrepreneurship! 在進入正題之前想 Murmur 一下當代資深行銷從業人員的苦痛與憂傷… 這個主題的文章會帶到:
Thumbnail
歌曲裡獨秀的吉他,放肆的刷出對社會世俗框架的吶喊與忿忿不平,同時也釋放對夢想的熱忱。相當推薦聆聽此曲時,搭配 MV 觀賞,你會看見主唱阿璞的小房間裡,穿梭年輕與成熟形成對比的樣子,是小芽長成大樹的夢想,每個一事無成的時刻堆疊,換來努力生活的偉大。
Thumbnail
簽名簿上的日語和錦連所敘述的抄寫,令人不禁想像跨語言世代文學者習得語言的迴路和他們的身體記憶,還無法運用流暢中文表現前,他們僅能抓住的浮木是日語;已經能夠用中文表現自己後,日語卻還是他們的拐杖。在封閉、嚴峻的時代情勢裡,更是一只望遠鏡。
Thumbnail
最近想開啟「經典電影」「藝文選片」等影評計畫,剛好發現BBC曾在2016年評選出二十一世紀百大電影,而高居第一名的是大衛林區的《穆荷蘭大道》。 在對劇情一無所知的情況下直接看了電影,非常喜愛,連續看了兩遍!緊接著看的紀錄片《大衛林區:獨白囈語》,也讓人更加理解導演眼中的世界、他所沉浸的藝術實驗,
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
這是一部用與惡魔交合、嘔奶、吐血、地鐵流產等衝擊視覺畫面,包裝以成的婚姻故事。⠀沒什麼比看這一個大美人發瘋更令人著迷了,記得是在高中時看到法國國寶阿佳妮的神顏才(誤)點開過來看,原本以為是一部用犯罪和愛情的劇。
Thumbnail
你是否有發現過,當你想買車子的時候,考慮要買白色、黑色或是紅色時,如果你心裡有自己默默決定的答案,像是你其實你就是想買白色車子,這時在路上你會覺得,哇,原來白色的車子那麼多啊。 也許白色車子本來就很多,但因為你的注意力更注重在在白色車子上,因此產生了「視網膜效應」
…..夜幕來臨,未知的焦慮緊抓著我,只希望問題快速被解決的衝動在體內流竄著。「要不我們見個面在咖啡廳一起找房會比較快。」對方的提出我不疑有他,拿著電腦出了門…..
Thumbnail
隨著ChatGPT的出現,有許多科技業的專家甚至網路上的意見領袖,紛紛在測試與討論ChatGPT如何能應用於各種領域?媒體也再度提及類似有哪些工作未來會被人工智慧(AI)取代的論調。
Thumbnail
Web 3 行銷時代的新工具:NFTs — 從 Web 2 到 Web 3 的橋樑 商業目的 1. — 提高品牌知名度,擴大影響力 商業目的 2. — 創造新的體驗和專屬通行證 商業目的 3. — 投注社會公益以提高品牌忠誠度 鼓勵更多女性創作者加入的 NFTs 項目 — boohooverse
Thumbnail
Web 3- 所有權 ( Ownership)就是社群。每個 TA 都是實實在在參與社群的建構、打造社群共識的人。在 Web 3 世界裡的一個鏈上,可以是由多個不同 interest niche 社群所組成的,甚至每個社群之間有像小丑魚和海葵一樣不可分割、必須互利共生的關係存在。這一點是和 Web
Thumbnail
好消息是你又多了一條充滿紅利的虛擬溝通渠道,壞消息是沒有人能告訴你如何準確預估這裡的 ROAS 或合理化你的 ROI。It’s time to show your entrepreneurship! 在進入正題之前想 Murmur 一下當代資深行銷從業人員的苦痛與憂傷… 這個主題的文章會帶到:
Thumbnail
歌曲裡獨秀的吉他,放肆的刷出對社會世俗框架的吶喊與忿忿不平,同時也釋放對夢想的熱忱。相當推薦聆聽此曲時,搭配 MV 觀賞,你會看見主唱阿璞的小房間裡,穿梭年輕與成熟形成對比的樣子,是小芽長成大樹的夢想,每個一事無成的時刻堆疊,換來努力生活的偉大。
Thumbnail
簽名簿上的日語和錦連所敘述的抄寫,令人不禁想像跨語言世代文學者習得語言的迴路和他們的身體記憶,還無法運用流暢中文表現前,他們僅能抓住的浮木是日語;已經能夠用中文表現自己後,日語卻還是他們的拐杖。在封閉、嚴峻的時代情勢裡,更是一只望遠鏡。
Thumbnail
最近想開啟「經典電影」「藝文選片」等影評計畫,剛好發現BBC曾在2016年評選出二十一世紀百大電影,而高居第一名的是大衛林區的《穆荷蘭大道》。 在對劇情一無所知的情況下直接看了電影,非常喜愛,連續看了兩遍!緊接著看的紀錄片《大衛林區:獨白囈語》,也讓人更加理解導演眼中的世界、他所沉浸的藝術實驗,