模拟顺时针画矩阵的过程:
- 填充上行从左到右
- 填充右列从上到下
- 填充下行从右到左
- 填充左列从下到上
画每四条边,每画一条边都要坚持一致的左闭右开
考虑到矩阵为正方形和长方形的两种情况,所以每次放入一个元素就减一。
本题还需要注意matrix数组没有元素的情况,此时直接返回空数组即可
代码实现class Solution {
public int[] spiralOrder(int[][] matrix) {
int rows = matrix.length;
if (matrix.length == 0) {
return new int[]{};
}
int columns = matrix[0].length;
int n = rows * columns;
int[] res = new int[n];
int left = 0;
int right = columns - 1;
int top = 0;
int bottom = rows - 1;
int index = 0;
while (top <= bottom) {
for (int i = 0; i < right - left && n > 0; i++) {
res[index++] = matrix[top][left + i];
n--;
}
for (int i = 0; i < bottom - top && n > 0; i++) {
res[index++] = matrix[top + i][right];
n--;
}
for (int i = 0; i < right - left && n > 0; i++) {
res[index++] = matrix[bottom][right - i];
n--;
}
for (int i = 0; i < bottom - top && n > 0; i++) {
res[index++] = matrix[bottom - i][left];
n--;
}
if (left == right && top == bottom) {
res[index++] = matrix[left][left];
}
top++;
left++;
bottom--;
right--;
}
return res;
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)