(三)剑指offer 18 顺时针遍历数组

需要维护四个变量 :

 left :矩阵的左边界

right:矩阵的右边界

upper:矩阵的上边界;

buttom:矩阵的下边界

遍历的顺序:

左——右:[left,right]      只有这一个不用另加判断剩余的三个都要另外判断;

上——下:[upper+1,buttom];判断它的前提是(lfetupper)

右——左:[right-1,left];需要判断;

下——上:[buttom-1,upper+1];需要判断


然后维护这四个变量;while(left<=right&&upper<=right)满足这个条件;



class Solution {
public:
    vector printMatrix(vector > matrix) 
    {
        vectorresult;
        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=left;i--)
                    result.push_back(matrix[buttom][i]);
            //下--》上
            if(upper=upper+1;j--)
                result.push_back(matrix[j][left]);
            left++;//维护这四个参数的大小
            right--;
            upper++;
            buttom--;
        }

        
        return result;
    }
};




你可能感兴趣的:(5-8号开始,新刷,剑指offer,第三遍)