leetcode-54. Spiral Matrix
题目:
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].
这题的思路就是如果顺时针转的话。那么每次我们连续向list中添加几个数。例如是3*3的格子,只要依次添加3,2,2,1,1就行,这里就有一定的规律了。每次添加matrix,length–或者matrix[0].length–的个数就好。那剩下的就是编程实现的问题了。虽然比较麻烦,但是基本上思路试很清晰的。
另外一个小问题是计数。我这里没有想到什么好的办法,就是求出总的数组数字数量。然后计数直到计数到数组数字数量为止。
public class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> ret= new ArrayList<Integer>();
if(matrix==null || matrix.length==0 || matrix[0].length==0) return ret;
int m = matrix[0].length, n=matrix.length,total=m*n,i=0,j=-1,c=0;
n--;
boolean row=false,col=false;
while(c<total){
for(int t = 0;t < m;t++){
if(row)
j--;
else
j++;
// System.out.println(i+" "+j);
ret.add(matrix[i][j]);
c++;
}
m--;
row=!row;
if(c>=total) break;
for(int t = 0;t < n;t++){
if(col)
i--;
else
i++;
// System.out.println(i+" "+j);
ret.add(matrix[i][j]);
c++;
}
n--;
col=!col;
}
return ret;
}
}