首页 > 其他分享 >螺旋矩阵

螺旋矩阵

时间:2024-09-03 21:15:37浏览次数:2  
标签:right matrix 螺旋 int top 矩阵 length left

题目:螺旋矩阵
分类:数组、矩阵、模拟
给你一个 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.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100

路径范围
往右走最大值right
往左走最小值left
往下走最大值bottom
往上走最小值top
【细节】right是的最大值,bottom是的最大值

思路

  • 起点——向右——到right,right不变,top+1(往下走一行)——向下——到bottom,bottom不变,right-1(向左走一列)——向左——到left,left不变,bottom-1(向上走一行)——向上——到top,top不变,left+1(向右走一行,此时已在第二排第二列了)完成一周

  • 继续螺旋循环,直到left>right,top<bottom退出,实则在二者相等时:仅剩一个元素,循环这一遍之后结束

【细节】

  1. 矩阵为空的处理
  2. 每次走都有两个条件,eg:即使top现在不变,也要保证top<=bottom的前提,否则会越界
  3. java中用.length获取大小,c++中用.size()
/*java*/
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> output = new ArrayList<>();
    //std::vector<int> spiralOrder(std::vector<std::vector<int>>& matrix) {
    //std::vector<int> output;
    if(matrix==null||matrix.length==0||matrix[0].length==0)
        return output;

        int left=0;
        int top=0;
        int bottom=matrix.length-1;
        int right=matrix[0].length-1;

        int i=0;
        while(left<=right && top<=bottom){
            for(i=left;i<=right&&top<=bottom;++i){
                output.add(matrix[top][i]);
            }
            top++;
            for(i=top;i<=bottom&&left<=right;++i){
                output.add(matrix[i][right]);
            }
            right--;
            for(i=right;i>=left&&top<=bottom;--i){
                output.add(matrix[bottom][i]);
            }
            bottom--;
            for(i=bottom;i>=top&&left<=right;--i){
                output.add(matrix[i][left]);
            }
            left++;
        }
        return output;
    }
};

标签:right,matrix,螺旋,int,top,矩阵,length,left
From: https://www.cnblogs.com/meriellan/p/18395464

相关文章

  • MATLAB 中的矩阵切片操作
    在MATLAB中,矩阵切片(MatrixSlicing)是一种非常常用的操作,用于从矩阵或数组中提取子集。这种操作非常灵活,可以通过指定行和列的索引来获取子矩阵。矩阵切片在数据处理、算法设计、图像处理等许多领域都非常有用。本文将详细介绍MATLAB中矩阵切片的基本用法和高级技巧。1.基......
  • 【量化交易的数学基础】文科生也能搞懂的线性代数基础:矩阵和向量的那些事儿
    今天,我们继续来聊聊听起来有点可怕的线性代数,但其实,理解它并不需要你具备什么“数学天赋”。只需要一点点好奇心和一点点耐心。坐稳了,我们要启航了!1.矩阵和向量的基本概念和运算矩阵和向量是什么鬼?想象一下,矩阵就像一个表格,横竖排列了一堆数字,比如说我们有个3x3的方阵(对......
  • 螺旋式给料机设计
    螺旋给料机把经过的物料通过称重桥架进行检测重量,以确定胶带上的物料重量,装在尾部的数字式测速传感器,连续测量给料机的运行速度,该速度传感器的脉冲输出正比于给料机的速度,速度信号和重量信号一起送入给料机控制器,控制器中的微处理器进行处理,产生并显示累计量/瞬时流量。该流量......
  • 图的广度优先搜索(BFS)算法与邻接矩阵表示
    图的广度优先搜索(BFS)算法与邻接矩阵表示1.图的表示2.广度优先搜索(BFS)BFS算法步骤:3.使用邻接矩阵的BFS实现4.运行时间分析时间复杂度:空间复杂度:5.BFS使用邻接列表与邻接矩阵的比较BFS在邻接列表上的运行时间:6.结论在计算机科学中,图......
  • L2-052 吉利矩阵 分数 25
    n=4时会被卡,可以打表过#include<bits/stdc++.h>usingnamespacestd;intl,n;constintN=5;intarr[N*N];intH[N],L[N];intf[10]={0,24,282,2008,10147,40176,132724,381424,981541,2309384};intdfs(intx){if(x>=n*n){ for(inti......
  • 解决平方矩阵问题
    问题输入整数N,输出一个N阶的二维数组。数组的形式参照样例。输入格式输入包含多行,每行包含一个整数N。当输入行为N=0时,表示输入结束,且该行无需作任何处理。输出格式对于每个输入整数N,输出一个满足要求的N阶二维数组。每个数组占N行,每行包含N个用空格隔开的整数。每个......
  • Magic Gems 矩阵乘法
    //MagicGems.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。///*http://oj.daimayuan.top/course/22/problem/1046题目描述Reziba拥有无限多个魔法宝石,每个魔法宝石的大小为1单元。每个魔法宝石可以被分解为m个普通宝石,每个普通宝石的大小也是1......
  • 每日OJ_牛客_蘑菇阵(在矩阵上dp)
    目录牛客_蘑菇阵(在矩阵上dp)解析代码牛客_蘑菇阵(在矩阵上dp)蘑菇阵__牛客网解析代码        类似于走迷宫,蘑菇代表不能走通,但不同的是,迷宫可以向前后左右四个方向移动,但该题走的方式只能向右或者向下两个方向移动,注意:右边界处只能向一个方向移动,因此走不通......
  • 【3.10】贪心算法-找出对应 LCP 矩阵的字符串
    一、题目对任一由n个小写英文字母组成的字符串word,我们可以定义一个nxn的矩阵,并满足:lcp[i][j]等于子字符串 word[i,...,n-1]和word[j,...,n-1]之间的最长公共前缀的长度。给你一个nxn的矩阵lcp。返回与lcp对应的、按字典序最小的字符串 word。如果......
  • 【从头写CAD】 转换矩阵类系列八,代码汇总
    为了找出优化代码的方案,梳理矩阵类现有代码。现汇总转换矩阵所有代码在同一个文件中,同时调整了与矩阵类重载的代码的先后次序。完整代码如下:/*矩阵类编程思路总说明:平面CAD对象主要包括点(point)、线(line含线段、直线、射线,宽线、多段线)、平面形状(shap含矩形、圆形、椭......