顺时针打印矩阵
力扣链接
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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
解题思路
循环遍历当步数<m*n时,由于每一个方向遍历的步数都是有规律的,只要遍历到步数为零停止即可,最后返回遍历的所有元素
代码
class Solution {
public int[] spiralOrder(int[][] matrix) {
int m = matrix.length;
if (m == 0) {
return new int[0];
}
int n = matrix[0].length;
if (n == 0) {
return new int[0];
}
List<Integer> list = new ArrayList<>();
//元素的个数
int count = m * n;
//轮数
int k = 0;
int i = 0;
int j = 0;
while (count > 0) {
for (; j < n - k && count > 0; j++) {
list.add(matrix[i][j]);
count--;
}
j--;
i++;
for (; i < m - k && count > 0; i++) {
list.add(matrix[i][j]);
count--;
}
i--;
j--;
for (; j >= k && count > 0; j--) {
list.add(matrix[i][j]);
count--;
}
j++;
i--;
for (; i >= k + 1 && count > 0; i--) {
list.add(matrix[i][j]);
count--;
}
i++;
j++;
k++;
}
int[] res = new int[list.size()];
int index = 0;
for (Integer integer : list) {
res[index++] = integer;
}
return res;
}
}
时间复杂度
O(m*n)