需要维护四个变量 :
left :矩阵的左边界
right:矩阵的右边界
upper:矩阵的上边界;
buttom:矩阵的下边界
遍历的顺序:
左——右:[left,right] 只有这一个不用另加判断剩余的三个都要另外判断;
上——下:[upper+1,buttom];判断它的前提是(lfet<right&&buttom>upper)
右——左:[right-1,left];需要判断;
下——上:[buttom-1,upper+1];需要判断
然后维护这四个变量;while(left<=right&&upper<=right)满足这个条件;
class Solution {
public:
vector<int> printMatrix(vector<vector<int> > matrix)
{
vector<int>result;
int m=matrix.size();
int n;
if(m!=0)
n=matrix[0].size();
if(m==0||n==0)
return result;
int left=0;
int right=n-1;
int upper=0;
int buttom=m-1;
while(left<=right&&upper<=buttom)//需要维护四个变量 左右上下;
{
//左-》右
for(int i=left;i<=right;i++)//只有第一行不需要判断其余的都需要判断左右的大小上下的大小
result.push_back(matrix[upper][i]);
//上--》下
if(upper<buttom)//注意这里一定要加上这一条 上<下;不然只有一行就直接结束,导致重复了;
for(int j=upper+1;j<=buttom;j++)
result.push_back(matrix[j][right]);
//右--》左
if(left<right&&upper<buttom)//
for(int i=right-1;i>=left;i--)
result.push_back(matrix[buttom][i]);
//下--》上
if(upper<buttom&&left<right)
for(int j=buttom-1;j>=upper+1;j--)
result.push_back(matrix[j][left]);
left++;//维护这四个参数的大小
right--;
upper++;
buttom--;
}
return result;
}
};