輸入一個矩陣,按照從外向裏以順時針的順序依次打印出每一個數字。
示例 1:
輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 輸出:[1,2,3,6,9,8,7,4,5]
示例 2:
輸入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 輸出:[1,2,3,4,8,12,11,10,9,5,6,7]
限制:
0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
這個就按順時針一步一步走
記得不要越界就好
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int> res;
if(matrix.empty()){
return res;
}
int lrTop = 0;
int lrBottom = matrix.size() - 1;
int tbLeft = 0;
int tbRight = matrix[0].size() - 1;
while(true){
// go right
for(i = 0; i <= tbRight; i++){
res.push_back(matrix[lrTop][i]);
}
lrTop++;
if(lrTop > lrBottom){
break;
}
// go down
for(i = lrTop; i <= lrBottom; i++){
res.push_back(matrix[i][tbRight]);
}
tbRight--;
if(tbRight < tbLeft){
break;
}
// go left
for(i = tbRight; i >= tbLeft; i--){
res.push_back(matrix[lrBottom][i]);
}
lrBottom--;
if(lrBottom < lrTop){
break;
}
// go up
for(i = lrBottom; i >= lrTop; i--){
res.push_back(matrix[i][tbLeft]);
}
tbLeft++;
if(tbLeft > tbRight){
break;
}
}
return res;
}
};