C++
首先定义出每个上下左右边界值 然后找到规律即可
class Solution { public: vector<int> spiralOrder(vector<vector<int> > &matrix) { if(matrix.size()==0){ return {}; } //定义边界 上下左右 int left = 0,right = matrix[0].size()-1,top = 0,bottom = matrix.size()-1; //结果数组 vector<int> res(matrix[0].size()*matrix.size()); int x = 0; while(true){ //从左到右 for(int i=left;i<=right;i++){ res[x++] = matrix[top][i]; } //第一层遍历完成后 top向下一层 //判断边界条件 if(++top>bottom) break; //从上到下 for(int i=top;i<=bottom;i++){ res[x++] = matrix[i][right]; } //最右边遍历完成后,right向左一层 //判断边界条件 if(--right<left) break; //从右到左 for(int i=right;i>=left;i--){ res[x++] = matrix[bottom][i]; } //最下边遍历完成后,bottom向上一层 //判断边界条件 if(--bottom<top) break; //从下到上 for(int i=bottom;i>=top;i--){ res[x++] = matrix[i][left]; } //最左边遍历完成后,left向右一层 //判断边界条件 if(++left>right) break; } return res; } };