题目描述:
思路:顺时针输出时,逐渐更新上右下左的边界,直到又相交时结束循环。
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
vector<int>ans;
if(matrix.empty()) return ans;
//上下左右的初始化
int u=0;
int d=matrix.size()-1;
int l=0;
int r=matrix[0].size()-1;
while(true){
//输出上端元素
for(int i=l;i<=r;i++) ans.push_back(matrix[u][i]);
//如果上与下相交,结束循环
if(++u>d) break;
//输出右端元素
for(int i=u;i<=d;i++) ans.push_back(matrix[i][r]);
//如果右与左相交,结束循环
if(--r<l) break;
//输出下端元素
for(int i=r;i>=l;i--) ans.push_back(matrix[d][i]);
//如果下与上相交,结束循环
if(--d<u) break;
//输出左端元素
for(int i=d;i>=u;i--) ans.push_back(matrix[i][l]);
//如果左与右相交,结束循环
if(++l>r) break;
}
return ans;
}
};