桂阳网站建设,网络营销的职业,郑州做网站那家好,做一个网站赚钱每日一题(LeetCode)----数组–螺旋矩阵#xff08;一#xff09;
1.题目#xff08;54. 螺旋矩阵#xff09;
给你一个 m 行 n 列的矩阵 matrix #xff0c;请按照 顺时针螺旋顺序 #xff0c;返回矩阵中的所有元素。
示例 1#xff1a; 输入#xff1a;matrix [[1…每日一题(LeetCode)----数组–螺旋矩阵一
1.题目54. 螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix 请按照 顺时针螺旋顺序 返回矩阵中的所有元素。
示例 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]提示
m matrix.lengthn matrix[i].length1 m, n 10-100 matrix[i][j] 100
2.解题思路
思路一
1.我们先根据矩阵的行数和列数行数/2和列数/2中较小的那个就是循环的次数确定要从左到右从上到下从右到左从下往上循环几次
2.然后我们进行遍历把遍历到的元素放到新创建的vector中每次遍历一个循环之后下一次遍历循环的初始位置是当前循环的x坐标1y坐标1注意刚开始遍历时循环的初始位置是00并且下一次遍历循环的每一条边的长度都要减一
3.填补中间位置
1如果矩阵的行数和列数有一个小于二那不用填补中间位置
2如果矩阵的行数和列数都大于2了那么看行数和列数谁更小判断小的那个是不是偶数
如果是那么结束操作
如果不是且当前列数较大那么从当前位置向右继续遍历列数-行数1个元素并放入到新创建的vector中
如果不是且当前行数较大那么从当前位置向下继续遍历行数-列数1个元素并放入到新创建的vector中
4.返回新创建的vector操作结束
注意如果行数等于1或者列数等于1要进行特别判断
如果行数等于1那么我们从初始位置向右遍历m个元素并放入到新创建的vector中然后返回新创建的vector中即可
如果列数等于1那么我们从初始位置向下遍历m个元素并放入到新创建的vector中然后返回新创建的vector中即可
3.写出代码
class Solution {
public:vectorint spiralOrder(vectorvectorint matrix) {int mmatrix.size();int nmatrix[0].size();vectorint res(m*n,0);int dirx0;int diry0;int loopmin(m/2,n/2);int offset1;int count0;if(n1){while(m--){res[count]matrix[count][0];count;}return res;}if(m1){while(n--){res[count]matrix[0][count];count;}return res;}while(loop--){int idirx;int jdiry;//从左到右for(;jn-offset;j){res[count]matrix[i][j];}//从上到下for(;im-offset;i){res[count]matrix[i][j];}//从右到左for(;jdiry;j--){res[count]matrix[i][j];}//从下往上for(;idirx;i--){res[count]matrix[i][j];}dirx;diry;offset;}if(m%2!0nmm2n2){int tn-m1;while(t--){res[count]matrix[dirx][diry];diry;}}if(n%2!0mnm2n2){int tm-n1;while(t--){res[count]matrix[dirx][diry];dirx;}}return res;}
};