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].
Analysis
每次走一圈并且及时调整index范围,具体见code。
Code
public class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> answer = new ArrayList<Integer>();
int r = matrix.length;
if (r==0) {return answer;}
int l = matrix[0].length;
int rowBegin = 0;
int rowEnd = r-1;
int colBegin = 0;
int colEnd = l-1;
//每个循环对应走一圈
while(rowBegin<=rowEnd && colBegin <= colEnd){
//向右走
for(int j=colBegin; j<=colEnd; j++) {answer.add(matrix[rowBegin][j]);}
rowBegin++;
//向下走
for(int i=rowBegin; i<=rowEnd; i++) {answer.add(matrix[i][colEnd]);}
colEnd--;
//向左走
//注意if很重要,可能经过上面,在同一个圈里已经不符合while的条件了
if(rowBegin<=rowEnd){
for(int j=colEnd; j>=colBegin; j--) {answer.add(matrix[rowEnd][j]);}
}
rowEnd--;
//向上走
//注意if很重要,可能经过上面,在同一个圈里已经不符合while的条件了
if(colBegin<=colEnd){
for(int i=rowEnd; i>=rowBegin; i--) {answer.add(matrix[i][colBegin]);}
}
colBegin++;
}
return answer;
}
}