ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

顺时针打印矩阵

2021-05-15 17:02:30  阅读:186  来源: 互联网

标签:std startX 顺时针 matrix int 打印 矩阵 width cout


解题思路

  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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

标签:std,startX,顺时针,matrix,int,打印,矩阵,width,cout
来源: https://www.cnblogs.com/boyang987/p/14771965.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有