国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【LeetCode-簡單】劍指 Offer 29. 順時(shí)針打印矩陣(詳解)

這篇具有很好參考價(jià)值的文章主要介紹了【LeetCode-簡單】劍指 Offer 29. 順時(shí)針打印矩陣(詳解)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

題目

輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字。

示例 1:

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

示例 2:

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

劍指 Offer 29. 順時(shí)針打印矩陣 - 力扣(LeetCode)

與 力扣54題相同

54.?螺旋矩陣

思路

二維數(shù)組順時(shí)針從外往里走

可以想象成:按照 右-》下-》左 -》上 的順序一直走,走過的地方不要走即可。

【LeetCode-簡單】劍指 Offer 29. 順時(shí)針打印矩陣(詳解),LeetCode刷題,leetcode,矩陣,算法

1. 每走過一個(gè)地方,就標(biāo)記一下,這樣下次就不會再走這里了

2. 循環(huán)往右走,直到不能走為止(不能走:既不超出數(shù)組邊界,并且下一個(gè)地方?jīng)]有走過的標(biāo)記)

3.?循環(huán)往下走,直到不能走為止

4.?循環(huán)往左走,直到不能走為止

5.?循環(huán)往上走,直到不能走為止

6. 重復(fù)2345這四步,直到四面八方?jīng)]有一個(gè)地方可以走

代碼

class Solution {
    public int[] spiralOrder(int[][] matrix) {
        int i = 0;
        int j = 0;
        int m = matrix.length;
        if (m == 0)return new int[0];
        int n = matrix[0].length;
        int passingFlag = Integer.MIN_VALUE;
        int res [] = new int[m * n];
        int p = 0;
        res[p] = matrix[i][j];
        matrix[i][j] = passingFlag;

        //上下左右有一個(gè)地方能走就行
        while ((j+1< n && matrix[i][j+1] != passingFlag)||  (i+1< m && matrix[i+1][j] != passingFlag) || (j - 1 >= 0 && matrix[i][j - 1] != passingFlag) || (i - 1 >= 0 && matrix[i-1][j] != passingFlag)){

            //往右走
            while (j+1< n && matrix[i][j+1] != passingFlag){
                j = j + 1;
                p++;
                res[p] = matrix[i][j];
                matrix[i][j] = passingFlag;
            }
            //往下走
            while (i+1< m && matrix[i+1][j] != passingFlag){
                i = i + 1 ;
                p++;
                res[p] = matrix[i][j];
                matrix[i][j] = passingFlag;

            }
            //往左走
            while (j - 1 >= 0 && matrix[i][j - 1] != passingFlag){
                j = j - 1;
                p++;
                res[p] = matrix[i][j];
                matrix[i][j] = passingFlag;

            }
            //往上走
            while (i - 1 >= 0 && matrix[i-1][j] != passingFlag){
                i = i - 1;
                p++;
                res[p] = matrix[i][j];
                matrix[i][j] = passingFlag;

            }
        }
        return res;

    }
}

效果

【LeetCode-簡單】劍指 Offer 29. 順時(shí)針打印矩陣(詳解),LeetCode刷題,leetcode,矩陣,算法

可以優(yōu)化的地方:

1.走過標(biāo)記

????????走過的標(biāo)記,這里我使用的是:走過一個(gè)地方就讓那里變成最小值Integer.MIN_VALUE,但是這么做不嚴(yán)謹(jǐn),因?yàn)闇y試?yán)永餂]有走過最小值,所以我通過了。

????????官方的做法是:用一個(gè)輔助矩陣,也就是再做一個(gè)二維數(shù)組,走過原數(shù)組,就在輔助數(shù)組上標(biāo)記一下,這么做才合情合理。

2.結(jié)束條件

? ? ? ? 判斷外層大循環(huán)結(jié)束,我的條件是只要四面八方都不能走了,就停止。

? ? ? ? 官方的結(jié)束條件是,只要結(jié)果數(shù)組滿了,就結(jié)束。

? ? ? ? 這樣看來 官方的解法要比我少判斷一些東西。

也就是將

        while ((j+1< n && matrix[i][j+1] != passingFlag)||  (i+1< m && matrix[i+1][j] != passingFlag) || (j - 1 >= 0 && matrix[i][j - 1] != passingFlag) || (i - 1 >= 0 && matrix[i-1][j] != passingFlag)){

替換成

        while (p+1 < m*n){

代碼會簡潔很多文章來源地址http://www.zghlxwxcb.cn/news/detail-704353.html

到了這里,關(guān)于【LeetCode-簡單】劍指 Offer 29. 順時(shí)針打印矩陣(詳解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 劍指Offer-29-順時(shí)針打印矩陣

    劍指Offer-29-順時(shí)針打印矩陣

    劍指Offer-29題 題目描述:順時(shí)針打印矩陣 輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字。 **題解思路:**使用 模擬 的方法 定義四個(gè)邊界變量表示當(dāng)前要遍歷的邊界:上(top)、下(bottom)、左(left)、右(right),條件結(jié)束的標(biāo)志是[上邊界=下邊界 且 左邊界=有邊

    2024年02月13日
    瀏覽(23)
  • 劍指offer(C++)-JZ29:順時(shí)針打印矩陣(算法-模擬)

    劍指offer(C++)-JZ29:順時(shí)針打印矩陣(算法-模擬)

    作者:翟天保Steven 版權(quán)聲明:著作權(quán)歸作者所有,商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處 題目描述: 輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字,例如,如果輸入如下4 X 4矩陣: 則依次打印出數(shù)字 數(shù)據(jù)范圍: 0 = matrix.length = 100 0 = ma

    2024年02月10日
    瀏覽(21)
  • 劍指29.順時(shí)針打印矩陣 31 棧的壓入,彈出序列 03 數(shù)組中的重復(fù)數(shù)字 53缺失的數(shù)字 04二維數(shù)組中的查找

    劍指29.順時(shí)針打印矩陣 31 棧的壓入,彈出序列 03 數(shù)組中的重復(fù)數(shù)字 53缺失的數(shù)字 04二維數(shù)組中的查找

    回字形 思路:pushed數(shù)組里遍歷進(jìn)棧,遍歷時(shí)候,先進(jìn)棧,再判斷棧頂是否和poped序列的當(dāng)前指向的是否一樣,一樣就pop,直到不一樣為止,然后繼續(xù)遍歷進(jìn)棧。然后再判斷棧里面剩余的和poped序列指向的一不一樣,一樣,就把棧里面的pop,直到棧為空,只要有一個(gè)不一樣,就

    2024年02月16日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí) jz29 順時(shí)針打印矩陣

    數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí) jz29 順時(shí)針打印矩陣

    :模擬 簡單題做了超過40分鐘 調(diào)了很久 不好? 我自己做的。 xy_t: 記錄xy的方向,往右走,往下走,往左走,往上走 t控制方向 isx: ????????true:輪到x方向動 ? ? ? ? false:輪到y(tǒng)方向動 n_res m_res: ? ? ? ? n_res:還沒走過的行數(shù)(x方向) ????????m_res:還沒走

    2024年01月17日
    瀏覽(19)
  • Leetcode-每日一題【劍指 Offer 06. 從尾到頭打印鏈表】

    Leetcode-每日一題【劍指 Offer 06. 從尾到頭打印鏈表】

    輸入一個(gè)鏈表的頭節(jié)點(diǎn),從尾到頭反過來返回每個(gè)節(jié)點(diǎn)的值(用數(shù)組返回)。 示例 1: 輸入: head = [1,3,2] 輸出: [2,3,1] 限制: 0 = 鏈表長度 = 10000 1.題目要求我們從尾到頭反過來返回每個(gè)節(jié)點(diǎn)的值,這道題我們可以用棧去解決,但是我們還可以采用另一種方法。就是我們可以

    2024年02月13日
    瀏覽(19)
  • 【算法】順時(shí)針打印矩陣(圖文詳解,代碼詳細(xì)注釋

    【算法】順時(shí)針打印矩陣(圖文詳解,代碼詳細(xì)注釋

    目錄 題目 代碼如下: 輸入一個(gè)矩陣,按照從外向里以順時(shí)針的順序依次打印出每一個(gè)數(shù)字。例如:如果輸入如下矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則打印出數(shù)字:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10 這一道題乍一看,沒有包含任何復(fù)雜的數(shù)據(jù)結(jié)構(gòu)和高級算法,似乎蠻簡單的。但

    2024年04月26日
    瀏覽(18)
  • Leetcode-每日一題【劍指 Offer 32 - I. 從上到下打印二叉樹】

    Leetcode-每日一題【劍指 Offer 32 - I. 從上到下打印二叉樹】

    從上到下打印出二叉樹的每個(gè)節(jié)點(diǎn),同一層的節(jié)點(diǎn)按照從左到右的順序打印。 例如: 給定二叉樹:? [3,9,20,null,null,15,7] , ??? 3 ?? / ? 9? 20 ??? /? ?? 15?? 7 返回: [3,9,20,15,7] 提示: 節(jié)點(diǎn)總數(shù) = 1000 1.題目要求我們從上到下打印出二叉樹的每個(gè)節(jié)點(diǎn),同一層的節(jié)點(diǎn)按照從左

    2024年02月12日
    瀏覽(22)
  • 【Leetcode -1290.二進(jìn)制鏈表轉(zhuǎn)整數(shù) -劍指Offer 06.從尾到頭打印鏈表】

    題目:給你一個(gè)單鏈表的引用結(jié)點(diǎn) head。鏈表中每個(gè)結(jié)點(diǎn)的值不是 0 就是 1。已知此鏈表是一個(gè)整數(shù)數(shù)字的二進(jìn)制表示形式。請你返回該鏈表所表示數(shù)字的十進(jìn)制值 。 示例 1: 輸入:head = [1, 0, 1] 輸出:5 解釋:二進(jìn)制數(shù)(101) 轉(zhuǎn)化為十進(jìn)制數(shù)(5) 示例 2: 輸入:head = [0] 輸出:

    2023年04月26日
    瀏覽(93)
  • (樹) 劍指 Offer 32 - I. 從上到下打印二叉樹 ——【Leetcode每日一題】

    (樹) 劍指 Offer 32 - I. 從上到下打印二叉樹 ——【Leetcode每日一題】

    難度:中等 從上到下打印出二叉樹的每個(gè)節(jié)點(diǎn),同一層的節(jié)點(diǎn)按照從左到右的順序打印。 例如: 給定二叉樹: [3,9,20,null,null,15,7], 返回: 提示 : 節(jié)點(diǎn)總數(shù) = 100 ??思路:BFS 使用 優(yōu)先隊(duì)列 進(jìn)行 層序遍歷 即可! ??代碼:(C++、Java) C++ Java ?? 運(yùn)行結(jié)果: ?? 復(fù)雜度分析: 時(shí)間

    2024年02月14日
    瀏覽(22)
  • Leetcode-每日一題【劍指 Offer 32 - III. 從上到下打印二叉樹 III】

    Leetcode-每日一題【劍指 Offer 32 - III. 從上到下打印二叉樹 III】

    請實(shí)現(xiàn)一個(gè)函數(shù)按照之字形順序打印二叉樹,即第一行按照從左到右的順序打印,第二層按照從右到左的順序打印,第三行再按照從左到右的順序打印,其他行以此類推。 例如: 給定二叉樹:? [3,9,20,null,null,15,7] , ??? 3 ?? / ? 9? 20 ??? /? ?? 15?? 7 返回其層次遍歷結(jié)果:

    2024年02月12日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包