顺时针打印矩阵

解题思路

  1. 四条边应该都利用左闭右开区间
  2. 要注意每次旋转的起始位置 和 矩阵长宽
  3. 最后应该是剩下一个横条 或竖条 ,这点可以模拟几次 再得出结论

代码

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {

       if(matrix.empty() || matrix[0].empty() ) return {};
       int startX=0,startY=0;
       int width= matrix[0].size() ;
       int height= matrix.size();
       std::vector<int> res;
     

       while(width>1&& height>1)
       {
           //left->right
           for(int x= startX;x< startX+ width-1;x++)
           {
            //    std::cout<< matrix[startY][x] << " ";
              res.push_back(matrix[startY][x]);
           }
           //up -> down
           int endX= startX+ width-1;
           for(int y=startY;y<startY+height-1;y++)
           {
               //std::cout << matrix[y][endX]<< " ";
               res.push_back( matrix[y][endX]);
           }
           int endY=startY+height-1;
           //right ->left
           for(int x= endX;x>startX;x-- )
           {
             //  std::cout << matrix[endY][x] << " ";
                res.push_back( matrix[endY][x]) ;
           }

           //down -> up
           for(int y= endY;y>startY; y--)
           {
              // std::cout << matrix[y][startX] << " ";
              res.push_back(matrix[y][startX]);
           }

           startX++;
           startY++;
           width -= 2;
           height-=2;
       }

       //最后应该是剩下一个横条 或竖条  
       if(height==1)
       {
           for(int m=startX;m<startX+width;m++)
           res.push_back(matrix[startY][m]);
       }else if(width==1)
       {
           for(int n=startY;n<startY+height;n++) 
           res.push_back(matrix[n][startX]);

       }

     //  if( matrix.size() %2 )   res.push_back(matrix[startY][startX]);
         
     return res;



    }
};

题目描述

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:

输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]

限制:

0 <= matrix.length <= 100
0 <= matrix[i].length <= 100

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/shun-shi-zhen-da-yin-ju-zhen-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

posted @ 2021-05-15 16:56  boyang987  阅读(41)  评论(0编辑  收藏  举报