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;
}
}