91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

LeetCode如何順時針打印矩陣

發布時間:2021-12-15 14:07:47 來源:億速云 閱讀:148 作者:小新 欄目:大數據

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

問題描述

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

示例 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

問題分析

逆時針打印,也就是下面這張圖這樣

LeetCode如何順時針打印矩陣

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

 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        // 上面行,從左往右打印(行不變,改變列的下標) 9        for (int col = left; col <= right; col++)10            res[index++] = matrix[up][col];11        if (++up > down)12            break;1314        // 右邊列,從上往下打印(列不變,改變行的下標)15        for (int row = up; row <= down; row++)16            res[index++] = matrix[row][right];17        if (--right < left)18            break;1920        // 下面行,從右往左打印(行不變,改變列的下標)21        for (int col = right; col >= left; col--)22            res[index++] = matrix[down][col];23        if (--down < up)24            break;2526        // 左邊列,從下往上打印(列不變,改變行的下標)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}

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

LeetCode如何順時針打印矩陣

 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如何順時針打印矩陣”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

若尔盖县| 泰安市| 景洪市| 墨竹工卡县| 黄浦区| 庄河市| 北安市| 巴马| 慈溪市| 墨竹工卡县| 安义县| 壤塘县| 彰武县| 防城港市| 抚宁县| 淮安市| 台江县| 琼结县| 甘谷县| 凤翔县| 陇川县| 黎平县| 秭归县| 固始县| 凤阳县| 台东市| 论坛| 简阳市| 开封县| 普兰县| 郯城县| 武义县| 右玉县| 天台县| 改则县| 盐亭县| 宜黄县| 城步| 卢氏县| 明光市| 永城市|