题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。
示例 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]
大神代码:
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
if(matrix.empty()) return {};
vector<int> res;
int l=0; //左边界
int r=matrix[0].size()-1; //右边界
int t=0; //上边界
int b=matrix.size()-1; //下边界
while(true){
//从左往右,直到等于右边界,++t 如果大于b 就中断 行t不变列i变
for(int i=l;i<=r;++i) res.push_back(matrix[t][i]);
if(++t>b) break;
//从上到下,直到等于下边界,--r 如果小于l 就中断 列r不变行i变
for(int i=t;i<=b;++i) res.push_back(matrix[i][r]);
if(--r<l) break;
//从右到左,直到等于左边界,--b 如果小于t 就中断 行b不变列i变
for(int i=r;i>=l;--i) res.push_back(matrix[b][i]);
if(--b<t) break;
//从下到上,直到等于上边界,++l 如果大于r 就中断 列l不变行i变
for(int i=b;i>=t;--i) res.push_back(matrix[i][l]);
if(++l>r) break;
}
return res;}
};