54. 螺旋矩阵 - 力扣(LeetCode)
就兜圈,先外层,再内层,每一圈,先上->右->下->左,要计算多少圈,观察规律就是行和列中更小的那个的二分之一,注意额外讨论下最后一圈只有一个或者只有一行或者只有一列这种特殊情况。
class Solution {public List<Integer> spiralOrder(int[][] matrix) {//20.57int m = matrix.length;int n = matrix[0].length;List<Integer> ans = new ArrayList<>(m*n);//旋转几个圈,由行和列中更小的那个决定int t = Math.min(m, n);for(int i = 0; i < (t+1)/2; i++) {// 1.上for(int j = i; j < n-i; j++)ans.add(matrix[i][j]);// 2.右for(int j = i+1; j<m-i;j++)ans.add(matrix[j][n-i-1]);// 3.下,注意中间只有一行的情况for(int j = n - i - 2;j>=i && i != m-i-1; j--)ans.add(matrix[m-i-1][j]);// 4.左,注意中间只有一列的情况for(int j = m-i-2; j > i && i != n-i-1; j--)ans.add(matrix[j][i]);}return ans;}
}