当前位置: 首页 > news >正文

【LeetCode】剑指 Offer(11)

目录 

题目:剑指 Offer 29. 顺时针打印矩阵 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


题目:剑指 Offer 29. 顺时针打印矩阵 - 力扣(Leetcode)

题目的接口:

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

解题思路:

这道题的思路也比较简单,

就是实现起来对边界的控制能力要求比较高,

根据题意顺时针打印矩阵,

先判断该矩阵是否为空;

然后,

我们通过控制上右下左四个边界打印。

(设置四个变量作为下标访问矩阵)

根据这个顺序循环:

打印边界的值,然后更新边界;

打印边界的值,然后更新边界;

打印边界的值,然后更新边界;

打印边界的值,然后更新边界;

每次打印完都判断矩阵是否已经打印完成,

如果矩阵已经打印完成,就跳出循环,

返回打印的值即可。

代码:

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        //建一个vector存放需要打印的值
        vector<int> v;

        //判断矩阵是否为空
        if(matrix.size() == 0)
        {
            return v;
        }

        //控制边界:

        //上边界
        int top = 0;

        //下边界
        int bottom = matrix.size() - 1;
        
        //左边界
        int left = 0;
        
        //右边界
        int right = matrix[0].size() - 1;

        //循环打印矩阵
        while(1)
        {
            //从左往右
            for(int i = left; i <= right; i++)
            {
                v.push_back(matrix[top][i]);
            }

            //更新上边界,并判断是否打印完成
            if(++top > bottom)
            {
                break;
            }

            //从上往下
            for(int i = top; i <= bottom; i++)
            {
                v.push_back(matrix[i][right]);
            }

            //更新右边界,并判断是否打印完成
            if(--right < left)
            {
                break;
            }

            //从右往左
            for(int i = right; i >= left; i--)
            {
                v.push_back(matrix[bottom][i]);
            }

            //更新下边界,并判断是否打印完成
            if(--bottom < top)
            {
                break;
            }

            //从下往上
            for(int i = bottom; i >= top; i--)
            {
                v.push_back(matrix[i][left]);
            }

            //更新左边界,并判断是否打印完成
            if(++left > right)
            {
                break;
            }   
        }
        
        //返回
        return v;
    }
};

过啦!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看。

相关文章:

  • 华为OD机试模拟题 用 C++ 实现 - 寻找连续区间(2023.Q1)
  • 优雅的controller层设计
  • Echarts 每个柱子一种渐变色的象形柱状图
  • Liunx(狂神课堂笔记)
  • 2023软件测试工程师全新技术栈,吃透这些,起薪就是25k~
  • k8s新增节点机器,无法拉取和推送镜像的解决方案
  • AIX系统常见漏洞修复(exec、rlogin、rsh、ftp、telnet远端服务运行中)
  • 计算机组成原理(1)--计算机系统概论
  • 带你深入了解c语言指针后续
  • 单调栈(C/C++)
  • 「牛客网C」初学者入门训练BC139,BC158
  • ESP32设备驱动-MAX30100心率监测传感器驱动
  • SpringMVC常见面试题(2023最新)
  • Linux系统下搭建maven环境
  • java:自定义变量加载到系统变量后替换shell模版并执行shell
  • Apollo(阿波罗)分布式配置安装详解
  • chatgpt的原理 第四部分
  • Gehpi的网络布局
  • go进阶(2) -深入理解Channel实现原理
  • 【数据库】 SQLServer
  • 第六季了,姐姐们还能掀起怎样的风浪
  • 中国船东协会:强烈要求美方停止基于政治偏见的调查和行动
  • 重庆警方通报“货车轮胎滚进服务区致人死亡”:正进一步调查
  • 稳健开局!今年粮食产量瞄准1.4万亿斤
  • 贝壳CEO拟捐赠价值4.68亿港元股份:用于行业人员医疗福利及应届生租客帮扶
  • 中央刚提级巡视,昆明2人宣告被查