1 解题思想
这道题是一个趣味遍历矩阵的题。
题目要求以螺旋的方式遍历一个m*n的二维数组,按照这个顺去遍历输出。所谓的螺旋,就是从0,0开始顺时针的,一圈一圈的遍历,从外到里。
这道题的基本解题思想就是设置四个边界,对应上下左右,按照这个边界,每次一次性的把这行或列遍历就可以了
2 原题
Given a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.
For example,
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].
3 AC解
public class Solution {
/**
* 分四个方向去做,分别设置一个上下界,每次遍历时不要超过上下界就好了
* */
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> list=new ArrayList<Integer>();
if(matrix.length==0)
return list;
int m=matrix.length-1,n=matrix[0].length-1;
int mstart=0,nstart=0,i;
//System.out.println(mstart+" "+m+" "+nstart+" "+n);
while(mstart<=m && nstart<=n){
for( i=nstart;i<=n;i++)
list.add(matrix[mstart][i]);
mstart++;
for( i=mstart;i<=m;i++)
list.add(matrix[i][n]);
n--;
for( i=n;i>=nstart && m>=mstart;i--)
list.add(matrix[m][i]);
m--;
for( i=m;i>=mstart && n>=nstart;i--)
list.add(matrix[i][nstart]);
nstart++;
}
return list;
}
}