输入一个矩阵,从外到里打印所有元素
代码class Solution {
public:
vector spiralOrder(vector>& matrix) {
vectorres;
if(matrix.size()==0||matrix[0].size()==0) return res;
int m=matrix.size();
int n=matrix[0].size();
int left=0;
int right=n-1;
int up=0;
int down=m-1;
while(1){
for(int heng=left;heng<=right;heng++)
res.push_back(matrix[up][heng]);
up++;
if(up>down) break;
for(int shu=up;shu<=down;shu++)
res.push_back(matrix[shu][right]);
right--;
if(left>right) break;
for(int heng=right;heng>=left;heng--)
res.push_back(matrix[down][heng]);
down--;
if(up>down) break;
for(int shu=down;shu>=up;shu--)
res.push_back(matrix[shu][left]);
left++;
if(left>right) break;
}
return res;
}
};
思路
依次从左到右,从上到下,从右往左,从下往上进行循环遍历。
每次循环后:
从左到右:up++,因为这一行已经遍历
从上到下:right–,因为这一列已经遍历
从右往左:down–,因为这一行已经遍历
从下往上:left++,因为这一列已经遍历
循环结束条件:
从左到右遍历后:up++后up>down
从上到下遍历后:right–后left>right
从右往左遍历后:down–后up>down
从下往上遍历后:left++后left>right



