劍指 Offer 29. 順時針列印矩陣——控制好陣列邊界
阿新 • • 發佈:2020-12-19
題目描述
輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字。
示例 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;
}