首页 > 其他分享 >Leetcode原题 -- 螺旋矩阵相关

Leetcode原题 -- 螺旋矩阵相关

时间:2023-10-21 17:12:15浏览次数:47  
标签:columnIndexMin 原题 -- ++ rowIndexMin int 坐标 Leetcode

第一题:54. 螺旋矩阵

题目描述:给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 :

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

解题思路:按层遍历,如图所示,找到规律后就差不多了

public List<Integer> spiralOrder(int[][] matrix) {
    int rowIndexMin = 0;
    int rowIndexMax = matrix.length - 1;
    int columnIndexMin = 0;
    int columnIndexMax = matrix[0].length - 1;
    List<Integer> result = new ArrayList<>();
    while (rowIndexMin <= rowIndexMax && columnIndexMin <= columnIndexMax) {
        // 1、 横着走,从左到右 -> 行坐标不变 && 列坐标++
        for (int j = columnIndexMin; j <= columnIndexMax; j++) {
            result.add(matrix[rowIndexMin][j]);
        }

        // 2、竖着走,从上到下 -> 行坐标++ && 列坐标不变
        for (int i = rowIndexMin + 1; i <= rowIndexMax; i++) {
            result.add(matrix[i][columnIndexMax]);
        }

        if (rowIndexMin < rowIndexMax && columnIndexMin < columnIndexMax) {
            // 3、横着走,从右到左 -> 行坐标不变 && 坐标--
            for (int j = columnIndexMax - 1; j > columnIndexMin; j--) {
                result.add(matrix[rowIndexMax][j]);
            }

            // 4、竖着走,从下到上 -> 行坐标-- && 坐标不变
            for (int i = rowIndexMax ; i > rowIndexMin; i--) {
                result.add(matrix[i][columnIndexMin]);
            }
        }
        // 循环完后列瘦一圈
        rowIndexMin++;
        rowIndexMax--;
        columnIndexMin++;
        columnIndexMax--;
    }
    return result;
}

第二题:59. 螺旋矩阵 II

题目描述:给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

示例 1:

输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:

输入:n = 1
输出:[[1]]

解题思路:这题和上面的题类似的,只不过结果和输入倒过来了,思路一样的

public static int[][] generateMatrix(int n) {
    int rowIndexMin = 0;
    int rowIndexMax = n - 1;
    int columnIndexMin = 0;
    int columnIndexMax = n - 1;
    int[][] result = new int[n][n];
    int source = 1;
    while (rowIndexMin <= rowIndexMax && columnIndexMin <= columnIndexMax) {
        // 1、 横着走,从左到右 -> 行坐标不变 && 列坐标++
        for (int j = columnIndexMin; j <= columnIndexMax; j++) {
            result[rowIndexMin][j] = source++;
        }

        // 2、竖着走,从上到下 -> 行坐标++ && 列坐标不变
        for (int i = rowIndexMin + 1; i <= rowIndexMax; i++) {
            result[i][columnIndexMax] = source++;
        }

        if (rowIndexMin < rowIndexMax && columnIndexMin < columnIndexMax) {
            // 3、横着走,从右到左 -> 行坐标不变 && 坐标--
            for (int j = columnIndexMax - 1; j > columnIndexMin; j--) {
                result[rowIndexMax][j] = source++;
            }

            // 4、竖着走,从下到上 -> 行坐标-- && 坐标不变
            for (int i = rowIndexMax ; i > rowIndexMin; i--) {
                result[i][columnIndexMin] = source++;
            }
        }
        // 循环完后列瘦一圈
        rowIndexMin++;
        rowIndexMax--;
        columnIndexMin++;
        columnIndexMax--;
    }
    return result;
}

标签:columnIndexMin,原题,--,++,rowIndexMin,int,坐标,Leetcode
From: https://www.cnblogs.com/mjyung/p/17778303.html

相关文章

  • 浮点数表示
    表示N=尾数*基数^指数可以理解成十进制的0.00001=1×10-5 指数也可以称为阶码,一般使用移码表示(这是个正数,有阶符表示正负) 基数在计算机中无需存储,就是2 尾数一般使用补码表示(这个也是正数,有数符表示正负) 浮点数的比较与运算:1.运算方式:对阶-->尾数计算-->......
  • 如何一键私有化部署 Laf ?
    太长不看:Laf上架了Sealos的模板市场,通过Laf应用模板即可一键部署!Laf是一个完全开源的项目,除了使用公有云之外,还有大量的用户选择私有化部署Laf。然而,私有化部署通常伴随着更多的复杂性和门槛。例如,用户首先需要准备一台或多台服务器,然后在服务器上下载Laf的镜像,进行域......
  • 6.使用leetcode去练习语言
    目录1本章预览2简单题举例2.1题目描述2.2题目解析2.3题解2.4涉及基础语法3中等题举例3.1题目描述3.2题目解析3.3题解3.4涉及基础语法4本章小结1本章预览事实上本章并不会去讲述go语言的基础情况,而是去介绍如何使用Leetcode去帮助我们去学习go语言的基本语法,当然本......
  • Floyd算法
    Floyd算法 正如我们所知道的,Floyd算法用于求最短路径。Floyd算法可以说是Warshall算法的扩展,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3)。Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B。所以,我......
  • 算法篇---java算法应用
    算法篇---java算法应用 算法应用之百钱买白鸡(程序员副业--编程学习--业务交流--公众号:匠心程序定制)  案列说明:主要内容是:公鸡5元一只,母鸡3元一只,小鸡1元三只,问100元怎样可以买100鸡?思想:想要实现此算法,只要明白各种条件的关系即可,而且知道公鸡最多买20只,母鸡最多买33只......
  • 修改主机名称
    永久修改主机名称:修改语法:hostnamectlset-hostname新的主机名称查看语法:localhost[root@192~]#hostnamectlset-hostname新的主机名称[root@192~]#hostname 重新关掉窗口启动即可 ......
  • Java基础 捕获异常 灵魂四问
    一、如果try中没有遇到问题,怎么执行?答:会把try里面所有的代码全部执行完毕,不会执行catch里面的代码。只有当出现了异常才会执行catch里面的代码 二、如果try中可能会遇到多个问题,怎么执行?答:会写多个catch与之对应。如果我们要捕获多个异常,这些异常中如果存在父子......
  • 数学基础:特征值、特征向量
    目录方阵的特征值与特征向量特征方程特征子空间小结参考方阵的特征值与特征向量特征方程定义:设\(A=\begin{bmatrix}a_{ij}\end{bmatrix}\)是n阶方阵,若有λ和非零向量x,使得\[\tag{1}Ax=λx\]成立,则称λ为方阵A的特征值,非零向量x为A的属于(或对应于)特征值λ的特征向量。式(1)......
  • xss dompurify绕过 chrome
    主要利用chrome的<svg>和<p>标签一般来说浏览器进行解析的时候,解析规则趋于xml解析若不是html解析主要区别在于HTML中的某些标签在从文本反序列化时不能有子标签。例如<style>。如果查看HTML规范,我们会发现它的内容模型是Text。即使您尝试将元素放在<style>中,它也会被视为文本:......
  • linux创建及删除文件节点的命令
     1.手动创建文件节点的命令(mknod):  命令       文件目录&名称   文件类型     主设备号      次设备号mknod          /xxx/xx        c         120       ......