LeetCode59-螺旋矩阵||

这篇具有很好参考价值的文章主要介绍了LeetCode59-螺旋矩阵||。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

示例 1:
LeetCode59-螺旋矩阵||
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]

示例 2:
输入:n = 1
输出:[ [1] ]

读题获取信息

  1. 生成的是正整数的正方形
  2. 因此如果 n为偶数,那么正方形由 多个 循环圈数组成,如 n=4 时,如下图所示,正方形由 外圈 1-12 和 内圈 13-16 组成
    | 1 | 2 | 3 | 4 |
    | ---- | ---- | ---- | ---- |
    | 12 | 13 | 14 | 5 |
    | 11 | 16 | 15 | 6 |
    | 10 | 9 | 8 | 7 |
  3. 如果 n为奇数,那么正方形由 多个循环圈数 再加 1个数组成

思路
综上可以想到

  1. 按题目要求顺时针 循环赋值,循环的条件就是 旋转的圈数(n/2),
    n = 3,转一圈,加一个数
    n = 4,转两圈
    n = 5,转两圈,加一个数
    n = 6,转三圈
  2. 再细化每一圈,顺时针赋值可分为四个部分,从左到右,从上到下,从右到左,从下到上
  3. 每一部分都通过一个 for循环来进行判断赋值
  4. 重点在于每一部分的都要保持 循环不变量,也就是保证左闭右开或者左闭右闭

本题使用了左闭右开的形式

代码实现文章来源地址https://www.toymoban.com/news/detail-403824.html

class Solution {
    public int[][] generateMatrix(int n) {
        int[][] arr = new int[n][n];
        if(n==1){
            return new int[][]{{1}};
        }
        //赋的值
        int count = 1;
        //offset用于处理 圈数递增后 判断范围的相应改变
        int offset = 1;
        //x,y代表 每圈的起始位置
        int x=0,y=0;
        //p,q用于循环赋值指代 二维数据具体位置
        int p=0,q=0;
        //循环圈数
        int loop = 0;

        while(loop<n/2){
        	//处理圈数的第一部分,下面的循环依此类推
        		// n-offset 代表 右开,代入数字即很好理解
            for( q=y; q<n-offset ;q++){
                arr[x][q] = count++;
            }
            for(p=x;p<n-offset;p++){
                arr[p][q] = count++;
            }
            	//q > y也是如此,代表右开
            for(;q>y;q--){
                arr[p][q] = count++;
            }
            for(;p>x;p--){
                arr[p][q] = count++;
            }
            //赋值完一圈之后,走下一圈
            loop++;
            //走一下圈,对应的 判断范围也需要相应修改
            offset++;
            //走一下圈,那么许愿起始位置也更换
            x++;
            y++;
        }
        //当n为奇数时,多出的一个数直接赋值即可,注意此处是xy,指向新的起始位置;
        if(n%2==1){
            arr[x][y] = count;
        }
        return arr;
    }
}

到了这里,关于LeetCode59-螺旋矩阵||的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【LeetCode-中等题】59. 螺旋矩阵 II

    定义四个边界条件,每转一圈,把数值填进去,然后缩小一圈,直到不满足条件位置 结束循环条件可以是: 两种结束条件都可以,但是一定要注意每次处理一条边界的范围 不能重复赋值

    2024年02月09日
    浏览(31)
  • 【代码随想录 | Leetcode | 第四天】数组 | 螺旋矩阵 | 59

    欢迎来到小K的Leetcode|代码随想录|专题化专栏,今天将为大家带来螺旋矩阵的分享 ✨ 给你一个正整数 n ,生成一个包含 1 到 n 2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 示例 2: 提示: 思路: 本类型题目其实都不涉及什么算法,就是模拟

    2024年02月16日
    浏览(37)
  • 算法leetcode|59. 螺旋矩阵 II(rust重拳出击)

    给你一个正整数 n ,生成一个包含 1 到 n 2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 1 = n = 20 面对这道算法题目,二当家的再次陷入了沉思。 可以每次循环移动一步,判断移到边界就变换方向,巧用数组可以减少逻辑判断的复杂性。 也可以每次循环

    2024年02月11日
    浏览(28)
  • 【代码随想录 | Leetcode | 第四天】数组 | 螺旋矩阵 | 59-54

    欢迎来到小K的Leetcode|代码随想录|专题化专栏,今天将为大家带来螺旋矩阵的分享 ✨ 给你一个正整数 n ,生成一个包含 1 到 n 2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 示例 1: 示例 2: 提示: 思路: 本类型题目其实都不涉及什么算法,就是模拟

    2024年02月16日
    浏览(35)
  • Leetcode 977-有序数组的平方 | LeetCode209-长度最小的子数组 | Leetcode59-螺旋矩阵

    给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 思考: 这个数组为有序数组,那么即使前面有负的,数组平方的最大值只能是在数组的倆端,不是在左边就是右边,不可能是在中间 由此想到双指针做法,left从

    2024年02月16日
    浏览(39)
  • LeetCode977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

    LeetCode977.有序数组的平方 思路:         双指针应用         因为数组是有序的,数组中可能存在负数,所以其平方的最大值只可能是数组的头或尾,因此可以定义两个指针,i指向头,j指向尾。同时定义一个新数组result,让k指向新数组的最后一个元素,当nums[i] * nums[i]

    2023年04月21日
    浏览(35)
  • Day2:(1)有序数组的平方(2)长度最小的子数(3)Leetcode 59螺旋矩阵II

    (1)解析 Leetcode977 参考文章 参考视频 (2)思路 一开始考虑不采用新建一个新数组,在原数组上实现有序数组平方的排序,实现起来比较繁琐,细节会有些小错,后来采用新建数组的方式: 定义一个新数组resVec,和A数组一样的大小;让index指向resVec数组当前可插入元素的位

    2023年04月08日
    浏览(95)
  • LeetCode-Day2-977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II ,

    双指针法,原来数组是有序的,说明平房之后最左和最右两边的平方和是最大的,比较最大的插入新的vector数组,然后移动指针选下一个元素进行比较。 接下来就开始介绍数组操作中另一个重要的方法: 滑动窗口 。 所谓滑动窗口, 就是不断的调节子序列的起始位置和终止

    2024年02月16日
    浏览(35)
  • 看完这篇文章你就彻底懂啦{保姆级讲解}-----(LeetCode刷题59螺旋矩阵II) 2023.4.20

    本文章一部分内容参考于《代码随想录》----如有侵权请联系作者删除即可,撰写本文章主要目的在于记录自己学习体会并分享给大家,全篇并不仅仅是复制粘贴,更多的是加入了自己的思考,希望读完此篇文章能真正帮助到您!!! 力扣题目链接 分析题目: 元素按照 顺时

    2024年02月05日
    浏览(33)
  • 螺旋矩阵 II——力扣59

    题目描述 法一 模拟 初始化一个二维向量,名为matrix,它有n行和n列。向量的每个元素都是一个整数,初始化为0。初始化二维向量的语法如下: vectorvectorint matrix(n, vectorint(n)); 。 第一个参数n指定矩阵的行数 , 第二个参数vector(n)指定矩阵的列数 。第二个参数创建了一个大小

    2024年02月14日
    浏览(25)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包