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].
螺旋矩阵输出。
一开始我的思路是用i从0到m*n递增,然后将i映射到matrix[r][c]的r,c变量,即寻找一种映射关系就好。后来没想出来。
于是直接用直觉的方法,一圈一圈地扫。
需要注意每次扫的起点[r][c],以及需要扫多少步,row, column。处理好细节,比如r++,c–神马的。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int> > &matrix) {
vector<int> re;
int row = matrix.size();
if(row == 0){
return re; // empty input
}
int column = matrix[0].size();
int r = 0;
int c = 0;
while(row > 0 && column > 0){
//move right
for(int i = 0; i < column; i++){
re.push_back(matrix[r][c]);
c++;
}
c--;
r++;
if (--row == 0) break;
//move down
for(int i = 0; i < row; i++){
re.push_back(matrix[r][c]);
r++;
}
r--;
c--;
if (--column == 0) break;
//move left
for(int i = 0; i < column; i++){
re.push_back(matrix[r][c]);
c--;
}
c++;
r--;
if (--row == 0) break;
//move up
for(int i = 0; i < row; i++){
re.push_back(matrix[r][c]);
r--;
}
r++;
c++;
if (--column == 0) break;
}
return re;
}
};
