版权声明:本文为博主原创,未经允许请不要转载哦 https://blog.csdn.net/weixin_43277507/article/details/88170604
12、螺旋矩阵-I
spiral-matrix: Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.Given the following matrix:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
You should return[1,2,3,6,9,8,7,4,5].
题设要求:给定m×n个元素的矩阵(m行,n列),以螺旋顺序返回矩阵的所有元素。
分析:将给定的矩阵以螺旋的方式重新排列,不用改变数组元素,需要改变的是遍历的顺序。从左到右遍历完第一行之后,将从最后一列的第二行的元素遍历到最后一列的最后一行元素。直观地想像一下,其实就是不停地从外往内画圈。最大圈数是loop = numi>numj?(numj+1)/2:(numi+1)/2。
代码如下:
import java.util.ArrayList;
public class Solution{
public static void main(String[] args)
{
Solution sl = new Solution();
int[][] matrix= {{1,2},{3,4}};
ArrayList<Integer> list =sl.spiralOrder(matrix);
Integer value = null;
int size = list.size();
for (int i=0; i<size; i++)
{
value = (Integer)list.get(i);
System.out.print(value);
}
}
public ArrayList<Integer> spiralOrder(int[][] matrix)
{
ArrayList<Integer> list=new ArrayList<Integer>();
if(matrix == null || matrix.length ==0)
{
return list;
}
int numi = matrix.length;
int numj = matrix[0].length;
int loop = numi>numj?(numj+1)/2:(numi+1)/2;
for(int i=0;i<loop;i++,numi-=2,numj-=2)
{
for(int col = i;col<i+numj;col++)
{
list.add(matrix[i][col]);
}
for(int row = i+1;row<i+numi;row++)
{
list.add(matrix[row][i+numj-1]);
}
if(numi ==1||numj==1)
break;
for(int col = i+numj-2;col>=i;col--)
{
list.add(matrix[i+numi-1][col]);
}
for(int row = i+numi -2;row>i;row--)
{
list.add(matrix[row][i]);
}
}
return list;
}
}