www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 后端技術指南針
[導讀]今天為大家分享一道關于螺旋矩陣的問題。 話不多說,直接看題目。 01 第54題:螺旋矩陣 第54題:定一個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有元素。 示例 1: 輸入: [ ?[ 1, 2, 3 ], ?[ 4, 5, 6 ], ?[ 7, 8, 9 ] ]

今天為大家分享一道關于螺旋矩陣的問題。

話不多說,直接看題目。


01
第54題:螺旋矩陣


第54題:定一個包含 m x n 個元素的矩陣(m 行, n 列),請按照順時針螺旋順序,返回矩陣中的所有元素。

示例 1:

輸入:

[

 [ 1, 2, 3 ],

 [ 4, 5, 6 ],

 [ 7, 8, 9 ]

]

輸出: [1,2,3,6,9,8,7,4,5]


示例 2:

輸入:

[

  [1, 2, 3, 4],

  [5, 6, 7, 8],

  [9,10,11,12]

]

輸出: [1,2,3,4,8,12,11,10,9,5,6,7]


(題目有一定難度,如果沒有思路,可以先打兩把王者...)


02
題目分析


本題的思路,在于模擬螺旋的移動軌跡。

問題的難點,在于想明白模擬過程中會遇到什么問題。

那模擬的過程中會遇到什么樣的問題?邊界處理。


因為只有我們能找到邊界(邊界包括:1、數組的邊界 2、已經訪問過的元素),才可以通過“右,下,左,上”的方向來進行移動。同時,每一次碰壁,就可以調整到下一個方向。


思路明確了,我們看一下整個過程。假如我們的數組為:

[

  [1, 2, 3, 4],

  [5, 6, 7, 8],

  [9,10,11,12]

]


長成這樣:


我們首先對其設置好四個邊界:

up := 0
down := len(matrix) - 1
left := 0
right := len(matrix[0]) - 1


長成這樣:

同時,我們定義x和y,來代表行和列。

如x=2,y=1,則 arr[2][1]=10(第3行第2列)

然后我們從第一個元素開始行軍(y=left),完成第一行的遍歷,直到碰壁。(y<=right)

下面關鍵的一步來了,因為第一行已經走過了,我們將上界下調(up++),同時轉彎向下走。

直到碰到底部時(x<=down),我們將右界左調(right--),轉彎向左走。

后面向左和向上,分別完成下界上調(down--)左界右調(left++)

最后,對剩下的矩陣重復整個過程,直到上下、左右的壁與壁碰在一起(up <= down && left <= right,這是避免碰壁的條件)。


03
Go語言示例


所以這道題很簡單,只要會碰壁,就可以順利得到代碼(很漂亮,不是嗎?):


 1func spiralOrder(matrix [][]int) []int {
2    var result []int
3    if len(matrix) == 0 {
4        return result
5    }
6    left, right, up, down := 0len(matrix[0])-10len(matrix)-1
7    var x, y int
8    for left <= right && up <= down {
9        for y = left; y <= right && avoid(left, right, up, down); y++ {
10            result = append(result, matrix[x][y])
11        }
12        y--
13        up++
14        for x = up; x <= down && avoid(left, right, up, down); x++ {
15            result = append(result, matrix[x][y])
16        }
17        x--
18        right--
19        for y = right; y >= left && avoid(left, right, up, down); y-- {
20            result = append(result, matrix[x][y])
21        }
22        y++
23        down--
24        for x = down; x >= up && avoid(left, right, up, down); x-- {
25            result = append(result, matrix[x][y])
26        }
27        x++
28        left++
29    }
30    return result
31}
32
33func avoid(left, right, up, down int) bool {
34    return up <= down && left <= right
35}


最后再自戀一把:





注:本系列所有教程中都不會用到復雜的語言特性,大家不需要擔心沒有學過相關語法。算法思想最重要,使用各語言純屬本人愛好。同時,所有代碼均在leetcode上進行過測試運行,保證其嚴謹性!



每天一道圖解算法,如需進群 ↓↓↓

歡迎加微信llhaohao



轉發(fā)是對我最大的支持!




溫馨提示



小浩算法~

每天一起學習圖解漫畫算法。

一起刷題,一起成長!

~長按下方二維碼進行關注吧~


關注領取 "GeekTime" 全部資源



免責聲明:本文內容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯系我們,謝謝!

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯系該專欄作者,如若文章內容侵犯您的權益,請及時聯系本站刪除。
換一批
延伸閱讀

LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅動性能的關鍵。

關鍵字: 工業(yè)電機 驅動電源

LED 驅動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅動電源 照明系統(tǒng) 散熱

根據LED驅動電源的公式,電感內電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅動電源

在現代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質量和效率直接關系到城市的公共安全、居民生活質量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅動電源 功率因數校正

在LED照明技術日益普及的今天,LED驅動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現在的LED驅動電源

關鍵字: LED 驅動電源 開關電源

LED驅動電源是把電源供應轉換為特定的電壓電流以驅動LED發(fā)光的電壓轉換器,通常情況下:LED驅動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅動電源
關閉