1. 程式人生 > 其它 >劍指 Offer 29. 順時針列印矩陣——控制好陣列邊界

劍指 Offer 29. 順時針列印矩陣——控制好陣列邊界

技術標籤:劍指offer串和陣列java演算法

原題連結

題目描述

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

示例 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 int[] spiralOrder(int[][] matrix) {
    if(matrix == null || matrix.length == 0 || matrix[0].length == 0) return new int[0];
    int[] result = new int[matrix.length * matrix[0].length];
    int left = 0, right = matrix[0].length - 1, top = 0, bottom = matrix.length - 1, index = -1;
    while (left <=
right && top <= bottom){ // 上 for (int i = left; i <= right; i++) { result[++index] = matrix[top][i]; } // 右 for (int i = top + 1; i <= bottom; i++) { result[++index] = matrix[i][right]; } if(left < right &&
top < bottom){ // 下 for (int i = right - 1; i >= left ; --i) { result[++index] = matrix[bottom][i]; } //左 for (int i = bottom - 1; i > top; --i) { result[++index] = matrix[i][left]; } } ++left; --right; ++top; --bottom; } return result; }

提交結果