算法题每日一练---第64天:螺旋矩阵 I

简介: 算法

6.png

一、问题描述


给你一个 mn 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。


题目链接:螺旋矩阵 I


二、题目要求


样例 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]


考察

模拟计算
建议用时25~35min


三、问题分析


这一题主要考察模拟思想,比较经典的一道题目了。

33.png

首先我们先来确定方向与边界问题,首先定义为上、下、左、右四个方向,

分别用四个字母 u、d、l、r 代表


其中,u=0(最上面的一行)、d=行数、l=0(最左侧的一列)、r=列数。


看着上面的图我们实际模拟一下每一种情况

  1. 1->2->3->4 代表着  l->r 的方向,其中行=u,列从l->r逐步+1,到了4之后,向下转向8,那么u下降一行,++u
  2. 8->12->16 代表着  u->d 的方向,其中列=r,行从u->d逐步+1,到了16之后,向左转向15,那么r向左移动一列,--r
  3. 15->14->13 代表着 r->l 的方向,其中行=d,列从r->l逐步-1,到了13之后,向上转向9,那么d向上移动一行,--d
  4. 9->5     代表着  d->u 的方向,其中列=l,行从d->u逐步-1,到了5之后,向右转向,那么l向右移动一列,++l



上面就是一个循环内部的四次操作,对于循环内边界的判断:

  • 第一步 ++u>d ,退出循环
  • 第二步 --r
  • 第三步 --d
  • 第四步 ++l>r ,退出循环


下面代码严格对应上面的步骤,希望大家能够理解。


四、编码实现


classSolution {
public:
vector<int>spiralOrder(vector<vector<int>>&matrix) {
inti,u=0,d=matrix.size()-1,l=0,r=matrix[0].size()-1;//确定边界,初始化数据vector<int>v;//数组存储while(1)//循环内四步转换        {
for(i=l;i<=r;i++) v.push_back(matrix[u][i]);//l->r方向if(++u>d) break;
for(i=u;i<=d;i++) v.push_back(matrix[i][r]);//u->d方向if(--r<l) break;
for(i=r;i>=l;i--) v.push_back(matrix[d][i]);//r->l方向if(--d<u) break;
for(i=d;i>=u;i--) v.push_back(matrix[i][l]);//d->u方向if(++l>r) break;
        }
returnv;
    }
};

五、测试结果34.png

相关文章
|
3月前
|
存储 机器学习/深度学习 算法
【算法训练-数组 三】【数组矩阵】螺旋矩阵、旋转图像、搜索二维矩阵
【算法训练-数组 三】【数组矩阵】螺旋矩阵、旋转图像、搜索二维矩阵
60 0
|
3月前
|
算法
|
2月前
|
存储 算法 数据挖掘
python5种算法模拟螺旋、分层填充、递归、迭代、分治实现螺旋矩阵ll【力扣题59】
python5种算法模拟螺旋、分层填充、递归、迭代、分治实现螺旋矩阵ll【力扣题59】
|
2月前
|
存储 算法 数据挖掘
螺旋矩阵 II:从理论到实践的五种算法解析
螺旋矩阵 II:从理论到实践的五种算法解析
|
2月前
|
算法 机器人 数据挖掘
LeetCode题目54:螺旋矩阵【python4种算法实现】
LeetCode题目54:螺旋矩阵【python4种算法实现】
|
9月前
|
算法
代码随想录算法训练营第二天 | LeetCode 977.有序数组的平方、209.长度最小的子数组、59. 螺旋矩阵 II
代码随想录算法训练营第二天 | LeetCode 977.有序数组的平方、209.长度最小的子数组、59. 螺旋矩阵 II
49 0
|
9月前
|
算法 索引
代码随想录算法训练营第二天 |977.有序数组平方,209.长度最小的字数组,59.螺旋矩阵
代码随想录算法训练营第二天 |977.有序数组平方,209.长度最小的字数组,59.螺旋矩阵
|
12月前
|
算法 索引
代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结
代码随想录算法训练营第二天| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,总结
|
人工智能 算法
【数据结构与算法】数组2:双指针法 & 二分法(螺旋矩阵)
【数据结构与算法】数组2:双指针法 & 二分法(螺旋矩阵)
83 0
|
算法 Java
【算法】给你一个数字算出螺旋矩阵,要不要来试一试?
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的
79 2
【算法】给你一个数字算出螺旋矩阵,要不要来试一试?

热门文章

最新文章