顺时针打印矩阵
矩阵
题目
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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
注意:本题与主站 54 题相同:https://leetcode-cn.com/problems/spiral-matrix/
Related Topics
数组
矩阵
模拟
👍 543
👎 0
class Solution {
public int[] spiralOrder(int[][] matrix) {
}
}
思路
- 判断上、左、下、右四个方位
- 每个方位单独判断遍历逻辑
实现
class Solution {
public int[] spiralOrder(int[][] matrix) {
if (matrix.length==0)return new int[]{};
//1-上、2-左、3-下、4-右
int type =1;
//层
int level=0;
//返回数组序号
int index =0;
//横向当前坐标
int x = 0;
//纵向当前坐标
int y = 0;
int max = matrix.length*matrix[0].length;
int[] res = new int[max];
while (index<max){
if (x==level&&y==level&&type==4){
level++;
x=level;
y=level;
type=1;
}
res[index]=matrix[y][x];
if (y==level&&(x<matrix[0].length-1-level)){
type=1;
x++;
}
else if ((x==matrix[0].length-1-level)&&y<(matrix.length-1-level)){
type=2;
y++;
}
else if ((x>level)&&(y==matrix.length-1-level)){
type=3;
x--;
}
else if ((x==level)&&y>level){
type=4;
y--;
}
index++;
}
return res;
}
}
结果
解答成功:
执行耗时:2 ms,击败了22.83% 的Java用户
内存消耗:43.1 MB,击败了82.12% 的Java用户