您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“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
問題分析
逆時針打印,也就是下面這張圖這樣
代碼沒什么難度,主要是在打印的時候做一些邊界的判斷,看下代碼
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}
再來看一種方式,就是每次打印的時候上面一行和下面一行都是完整打印,左邊一列和右邊一列打印的值是夾在上下兩行之間的,打印一圈之后,再縮小圈的范圍。和上面有一點點區別,但原理還是沒變。
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如何順時針打印矩陣”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。