【完整可运行代码】剑指 Offer 29. 顺时针打印矩阵
生活随笔
收集整理的這篇文章主要介紹了
【完整可运行代码】剑指 Offer 29. 顺时针打印矩阵
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
立志用最少的代碼做最高效的表達
輸入一個矩陣,按照從外向里以順時針的順序依次打印出每一個數字。
示例 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
核心:本質為畫圖推導題,將矩陣拆分為四個部分考慮,逐個擊破!!!
public class 劍指Offer29_順時針打印矩陣 {static class Solution {public int[] spiralOrder(int[][] matrix) {// 本質是規律題,拆分為四個部分考慮!!!int row = matrix.length;if(row == 0) return new int[0];int col = matrix[0].length;int[] res = new int[col*row];int num = 0; // res數組的下標int up = 0, right = col-1, down = row-1, left = 0; // 四個坐標的參數while(num < col*row) {// 上for(int i = up; (i<=right) && (num<col*row); i++) // 多加的限定條件,為了防止越界訪問,單行或單列的情況res[num++] = matrix[up][i];up++;// 右for(int i = up; (i<=down) && (num<col*row); i++)res[num++] = matrix[i][right];right--;// 下for(int i = right; (i>=left) && (num<col*row); i--)res[num++] = matrix[down][i];down--;// 左for(int i = down; (i>=up) && (num<col*row); i--)res[num++] = matrix[i][left];left++;}return res;}}public static void main(String[] args) { // int[][] m = new int[][]{{1,2,3},{4,5,6},{7,8,9}};// 奇數次序列 // int[][] m = new int[][]{{1,2,3,4,5},{16,17,18,19,6},{15,24,25,20,7},{14,23,22,21,8},{13,12,11,10,9}};// 偶數次序列 // int[][] m = new int[][]{{1,2,3,4},{12,13,14,5},{11,16,15,6},{10,9,8,7}};// 只有1個數 // int[][] m = new int[][]{{1}};// 行列不等 // int[][] m = new int[][]{{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};// 只有一行int[][] m = new int[][]{{1,2,3,4}};Solution solution = new Solution();int[] nums = solution.spiralOrder(m);for(int i = 0; i < nums.length; i++) {System.out.println(nums[i] + " ");}} }天若有情天亦老,人間正道是滄桑。?????——教員
總結
以上是生活随笔為你收集整理的【完整可运行代码】剑指 Offer 29. 顺时针打印矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 剑指 Offer 28. 对称的二叉树【
- 下一篇: 【简洁写法】剑指 Offer 30. 包