54. 螺旋矩阵
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
示例 1:
输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
方法:模拟遍历,依次向右遍历,向下遍历,向左遍历,向上遍历,每遍历一行或一列后移动到下一行或下一列,当新数组的大小等于原数组的大小时,跳出循环,返回结果
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
if(matrix==null||matrix.length==0)
{
return new ArrayList<>();
}
int minX=0;
int maxX=matrix.length-1;
int minY=0;
int maxY=matrix[0].length-1;
ArrayList<Integer> res=new ArrayList<>();
int size=matrix.length*matrix[0].length;
while(minX<=maxX&&minY<=maxY)
{
//向右遍历,x不变,y增大
for(int y=minY;y<=maxY;y++)
{
res.add(matrix[minX][y]);
}
if(res.size()==size)
{
break;
}
minX++;
//向下遍历,y不变,x增大
for(int x=minX;x<=maxX;x++)
{
res.add(matrix[x][maxY]);
}
if(res.size()==size)
{
break;
}
maxY--;
//向左遍历,x不变,y减小
for(int y=maxY;y>=minY;y--)
{
res.add(matrix[maxX][y]);
}
if(res.size()==size)
{
break;
}
maxX--;
//向上遍历,y不变,x减小
for(int x=maxX;x>=minX;x--)
{
res.add(matrix[x][minY]);
}
if(res.size()==size)
{
break;
}
minY++;
}
return res;
}
}