题目链接
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例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]
跟54 类似
class Solution {public int[] spiralOrder(int[][] matrix) {if(matrix.length == 0){return new int[0];}int lenY = matrix.length;int lenX = matrix[0].length;int num = lenX * lenY;int count = 0;// 遍历下标int i = 0;int j = 0;// 循环次数int loop = Math.min(lenX, lenY) / 2;int midX = lenX / 2;int midY = lenY / 2;// 偏移量int offsetX = 1;int offsetY = 1;// 结果数组int[] result = new int[num];while (loop > 0){// 上while (j < lenX - offsetX){result[count] = matrix[i][j];count++;j++;}// 右while (i < lenY - offsetY){result[count] = matrix[i][j];i++;count++;}// 下while (j > offsetX - 1){result[count] = matrix[i][j];j--;count++;}// 左while (i > offsetY - 1){result[count] = matrix[i][j];i--;count++;}loop--;offsetX++;offsetY++;i++;j++;if(count == num){return result;}}if(lenX < lenY){for(;i < lenY - Math.min(lenX, lenY) / 2;i++){result[count] = matrix[i][j];count++;}}if(lenX > lenY){for(;j < lenX - Math.min(lenX, lenY) / 2;j++){result[count] = matrix[i][j];count++;}}if(lenX == lenY && lenX % 2 != 0){result[count] = matrix[midX][midY];}for (int k = 0;k<num;k++){System.out.println(result[k]);}return result;}}
