溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

LeetCode如何順時(shí)針打印矩陣

發(fā)布時(shí)間:2021-12-15 14:07:47 來源:億速云 閱讀:139 作者:小新 欄目:大數(shù)據(jù)

這篇文章主要為大家展示了“LeetCode如何順時(shí)針打印矩陣”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“LeetCode如何順時(shí)針打印矩陣”這篇文章吧。

問題描述

輸入一個(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]

限制:

  • 0 <= matrix.length <= 100

  • 0 <= matrix[i].length <= 100

問題分析

逆時(shí)針打印,也就是下面這張圖這樣

LeetCode如何順時(shí)針打印矩陣

代碼沒什么難度,主要是在打印的時(shí)候做一些邊界的判斷,看下代碼

 1public int[] spiralOrder(int[][] matrix) { 2    if (matrix == null || matrix.length == 0) 3        return new int[0]; 4    int m = matrix.length, n = matrix[0].length; 5    int[] res = new int[m * n]; 6    int up = 0, down = m - 1, left = 0, right = n - 1, index = 0; 7    while (true) { 8        // 上面行,從左往右打?。ㄐ胁蛔?,改變列的下標(biāo)) 9        for (int col = left; col <= right; col++)10            res[index++] = matrix[up][col];11        if (++up > down)12            break;1314        // 右邊列,從上往下打?。胁蛔?,改變行的下標(biāo))15        for (int row = up; row <= down; row++)16            res[index++] = matrix[row][right];17        if (--right < left)18            break;1920        // 下面行,從右往左打?。ㄐ胁蛔儯淖兞械南聵?biāo))21        for (int col = right; col >= left; col--)22            res[index++] = matrix[down][col];23        if (--down < up)24            break;2526        // 左邊列,從下往上打?。胁蛔?,改變行的下標(biāo))27        for (int row = down; row >= up; row--)28            res[index++] = matrix[row][left];29        if (++left > right)30            break;31    }32    return res;33}

再來看一種方式,就是每次打印的時(shí)候上面一行和下面一行都是完整打印,左邊一列和右邊一列打印的值是夾在上下兩行之間的,打印一圈之后,再縮小圈的范圍。和上面有一點(diǎn)點(diǎn)區(qū)別,但原理還是沒變。

LeetCode如何順時(shí)針打印矩陣

 1public int[] spiralOrder(int[][] matrix) { 2    if (matrix == null || matrix.length == 0) 3        return new int[0]; 4    int n = matrix.length, m = matrix[0].length; 5    int[] res = new int[m * n]; 6    int up = 0, down = n - 1; 7    int left = 0, right = m - 1; 8    int total = m * n; 9    int index = 0;10    while (index < total) {11        //上面,從左往右打印12        for (int j = left; j <= right && index < total; j++)13            res[index++] = matrix[up][j];14        //右邊,從上往下打印(注意這里i的取值范圍)15        for (int i = up + 1; i <= down - 1 && index < total; i++)16            res[index++] = matrix[i][right];17        //下邊,從右往左打印18        for (int j = right; j >= left && index < total; j--)19            res[index++] = matrix[down][j];20        //左邊,從下往上打印(注意這里i的取值范圍)21        for (int i = down - 1; i >= up + 1 && index < total; i--)22            res[index++] = matrix[i][left];23        left++;24        right--;25        up++;26        down--;27    }28    return res;29}

以上是“LeetCode如何順時(shí)針打印矩陣”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI