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

循环不变量原则——螺旋矩阵

题目:螺旋矩阵
本题相较于螺旋矩阵II的不同之处是:螺旋矩阵II的矩阵是n行n列的方阵,而本题的矩阵并不一定是方阵。所以在遵循循环不变量原则遍历完矩阵后,还会有一行或者一列没有遍历。
1、行多列少(多一列没遍历)

在这里插入图片描述

2、行少列多(多一行没遍历)

在这里插入图片描述

对于多出来的一行或者一列,要在遍历完每一个整圈之后,单独处理。
class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
        //关键:统一循环不变量
        int width = matrix[0].size();
        int height = matrix.size();
        int times=min(width/2, height/2);
        vector<int> result;
        int startX;
        int startY;
        for(int i=0; i<times; i++)
        {
            //一次遍历完一圈数字
            startX=i;
            startY=i;
            for(; startY<width-i-1; startY++)
            {
                result.push_back(matrix[startX][startY]);
            }
            for(; startX<height-i-1; startX++)
            {
                result.push_back(matrix[startX][startY]);
            }
            for(; startY>i; startY--)
            {
                result.push_back(matrix[startX][startY]);
            }
            for(; startX>i; startX--)
            {
                result.push_back(matrix[startX][startY]);
            }
        }
        if(width>height)
        {
        //行多列少,处理未遍历到的那列
            if(height%2!=0)
            {
                startX = height/2;
                startY = height/2;
                for(; startY<width-height/2; startY++)
                {
                    result.push_back(matrix[startX][startY]);
                }
            }
        }
        else
        {
        //列多行少,处理未遍历到的那行
            if(width%2!=0)
            {
                startX = width/2;
                startY = width/2;
                for(; startX<height-width/2; startX++)
                {
                    result.push_back(matrix[startX][startY]);
                }
            }
        }
        
        return result;
    }
};

相关文章:

  • 基于Spring Boot的企业内管信息化系统的设计与实现(LW+源码+讲解)
  • 综合章节:游戏网络化、模组化与深度扩展
  • Mysql深分页的解决方案
  • 再次理解 Spring 中的 IOC、DI、AOP 与多态
  • 【CF】Day14——Codeforces Round(Div2) 924 BC + 926 C + 934 C + 922 C
  • k8s的控制应用Helm
  • 【学习笔记】LLM推理与部署
  • Spring6:10 数据校验-Validation
  • 基于SpringBoot+Vue的在线拍卖管理系统+LW示例参考
  • JavaScript 赋值运算符
  • windows剪切板的内容无法拷贝到虚拟机virtualbox里的Rocky Linux中 --Draft
  • Unity图形学Shader快速回顾
  • C++ Json-Rpc框架-2框架(服务端模块 客户端模块 框架设计)
  • 【Python】【PyQt5】设置事件绑定(例为按钮点击显示提示框)
  • 生物信息复习笔记(2)——测序基本概念
  • xampp安装教程与配置
  • React Router使用方法
  • 单片机开发资源分析实战——以STM32F103ZET6为例子,分析我们的单片机
  • matlab的meshgrid
  • 从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.1.1自注意力机制(Scaled Dot-Product Attention)的逐行代码实现
  • 李云泽:小微企业融资协调工作机制已发放贷款12.6万亿元
  • 涉个人信息收集使用问题,15款App和16款SDK被通报
  • 经济日报头版刊文:为什么贸易战没有出路
  • 五一档7.47亿收官:《水饺皇后》领跑;男观众占比增多
  • 越老越妖的库里,成了火箭季后赛里一晃十年的噩梦
  • 菲律宾首都机场航站楼外发生汽车冲撞事故致2死多伤