59. 螺旋矩阵 II(java实现,史上最详细教程,想学会的进!!!)

今天来分享一下螺旋矩阵的解题思路及代码的实现。
题目描述如下:
在这里插入图片描述
首先拿到这道题,首先不要慌张,我们来仔细分析一下会发现并没有那么难。
首先看下边界的元素是1、2、3递增的,那么我们也许可以根据这一点先把边界的元素一个一个给加入到数组中。
具体思路如下:
我们看下面这个例子,我们创建一个4行4列的螺旋矩阵来进行分析
在这里插入图片描述
如果我们每次处理前3个数字,比如第一行我们处理1-3,然后继续处理列也就是4-6,然后处理7-9,这样可以发现一个规律就是我们每次都不对末尾的元素进行处理,这样遵循了循环不变原则。
然后处理完一圈之后一次对内部的13、14、15、16依次处理。
那么需要注意的是输入的n是奇数和偶数的处理还是有一定的区别。
完整的代码如下:


```java
public  static  int[][] generateMatrix(int n) {
        int i=0;
        int j=0;
        int startx=0;
        int starty=0;
        int count=1;//用于1-16的赋值
        int flag=1;
        int[][] arr=new int[n][n];
        int k=n;
        while (k/2>0){//控制循环的次数
            //处理第一行
            for (j=starty;j<n-flag;j++){
                //这里需要注意,行要为startx,如果行设置为i的话,
                // 由于执行了第4个for循环后,i指向了0,那么在第一轮while循环没有问
                //题,但是会影响2、3。。。次while循环的赋值
                arr[startx][j]=count;//每次赋值完之后记得对count进行++
                count++;
            }

            for (i=startx;i<n-flag;i++){
                arr[i][j]=count;
                count++;
            }
            for (j=n-flag;j>starty;j--){
                arr[i][j]=count;
                count++;
            }
            for (i=n-flag;i>startx;i--){
                arr[i][j]=count;
                count++;

            }
            k-=2;//每次循环后k-2
            /**
             * 当经过一次循环后,需要对startx、y、flag进行++,便于后续的while循环的赋值
             */
            flag++;
            startx++;
            starty++;



        }
        //如果输入的n为奇数将中间的值进行赋值。
        if (n%2!=0){
            arr[startx][starty]=count;
        }
        return arr;
    }

``
方便大家理解我花了下面这幅图
在这里插入图片描述
第一轮while循环执行的步骤,当执行完第一个for循环之后,j指向了红色箭头,然后执行第2个for循环对蓝色框进行赋值,然后i指向了蓝色箭头所示,,,后面的两个for循环分别对紫色和绿色矩阵进行赋值。
需要注意的几个点:
1.当经过一次循环后,需要对startx、y、flag进行++,便于后续的while循环的赋值。
2. 每次while循环后需要进行-2或者/2的操作,但是不要操作传进来的n,需要用一个变量进行赋值,这样不会改变n的值,不会影响for循环的判断。
3. 还有就是对传入的n为奇数时的处理。
那么本道题的所有代码及思路就到这里结束了,如果有问题可以在文章下方留言,觉得博主写的不错的话麻烦点个小小的爱心。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/255005.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Discord Midjourney 安装使⽤教程(AI绘画)

安装步骤: 1.注册Discord账号 2.进⼊Midjourney社区创作 3.创建⾃⼰服务器 安装教程: 1.注册Discord账号 账号注册的方式&#xff1a; 注册地址: //账号注册地址https://discord.com/ 2.进⼊Midjourney社区创作 // 邀请链接: 官方的midjourneyhttps://discord.gg/midjo…

4.docker镜像及相关命令

目录 1 查看所有镜像 docker images 1.1 基本用法 1.2 docker images -q 只显示所有镜像ID 1.3 docker images -f [筛选条件] -q 只显示符合条件的所有镜像ID 1.4 docker images --no-trunc 显示完整的IMAGE ID 1.5 docker images --format [模板] 使用模板 2 从…

玩转Docker(六):数据挂载与共享

文章目录 〇、Docker的两种存放数据的资源1.Storage Driver2.Data Volume3.使用场景 一、使用Data Volume1.-v <host_path>:<container_path>2.-v <container_path>挂载匿名卷 二、数据共享1.容器和主机之间共享2.容器之间共享(1)方法一&#xff1a;-v非匿名…

Mysql之Specified key was too long; max key length is xx bytes异常

问题原因&#xff1a;mysq索引的字段都太长了 767字节是 MySQL 版本5.6(以及以前版本)中 InnoDB 表的最大索引前缀长度限制&#xff0c;MyISAM 表的长度为1,000字节。在 MySQL 版本5.7及以上版本中&#xff0c;这个限制增加到了3072字节。 如果对 utf8mb4编码的 varchar 字段设…

第七节JavaScript Promise

一、JavaScript Promise 1、简介 Promise是一个ES6提供的类&#xff0c;目的是更加优雅地书写复杂的异步任务。 由于Promise是ES6新增的&#xff0c;所以一些旧的浏览器并不支持&#xff0c;苹果的Safari 10和Windows的Edge 14版本以上的浏览器才支持&#xff0c;这个需要注…

[AutoSar]基础部分 RTE 02 S/R Port 显式/隐式

目录 关键词平台说明一、显式&#xff08;Explicit&#xff09;和隐式&#xff08;Implicit&#xff09;1.1 显式模式1.1.1code 二、隐式模式2.1 code 三、区别 关键词 嵌入式、C语言、autosar、EcuM、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语…

Content-Type是什么

目录 Content-Type是什么 获取方式 设置方式 常见类型 application/x-www-form-urlencoded multipart/form-data application/json text/xml text/html text/plain Content-Type是什么 Content-Type出现在请求标头和响应标头中&#xff0c;意思是内容类型&#xff0…

Ubuntu如何安装KVM

环境&#xff1a; 联想E14笔记本 Ubuntu20.04 问题描述&#xff1a; Ubuntu如何安装KVM 解决方案&#xff1a; 1.验证CPU是否支持硬件虚拟化 rootst-ThinkPad-E14:~# grep -Eoc (vmx|svm) /proc/cpuinfo 162.检查 VT 是否在 BIOS 中启用 安装 apt install cpu-checker …

论文阅读——Painter

Images Speak in Images: A Generalist Painter for In-Context Visual Learning GitHub - baaivision/Painter: Painter & SegGPT Series: Vision Foundation Models from BAAI 可以做什么&#xff1a; 输入和输出都是图片&#xff0c;并且不同人物输出的图片格式相同&a…

隐私计算介绍

这里只对隐私计算做一些概念性的浅显介绍&#xff0c;作为入门了解即可 目录 隐私计算概述隐私计算概念隐私计算背景国外各个国家和地区纷纷出台了围绕数据使用和保护的公共政策国内近年来也出台了数据安全、隐私和使用相关的政策法规 隐私计算技术发展 隐私计算技术安全多方计…

滴滴出行:驾龄不到一年有什么办法注册网约车?

驾龄不到一年有什么办法注册网约车&#xff1f;怎么解决网约车注册审核问题。我可以为您提供一些对于如何注册滴滴快车的信息。要注册为滴滴快车司机&#xff0c;你需要符合下列规范&#xff1a; 1.年龄在12-60岁左右&#xff0c;有C1或以上驾照&#xff0c;如果驾龄不够三年是…

JVM 垃圾回收详解

前言 什么是垃圾? 垃圾是指运行程序中没有任何引用指向的对象&#xff0c;需要被回收。 内存溢出和内存泄漏 内存溢出&#xff1a;经过垃圾回收之后&#xff0c;内存仍旧无法存储新创建的对象&#xff0c;内存不够溢出。 内存泄漏&#xff1a;又叫“存储泄漏”&#xff0…

【Leetcode】旋转矩阵

题目链接&#xff1a;https://leetcode.cn/problems/rotate-matrix-lcci/description/ 题目描述 给你一幅由 N N 矩阵表示的图像&#xff0c;其中每个像素的大小为 4 字节。请你设计一种算法&#xff0c;将图像旋转 90 度。 不占用额外内存空间能否做到&#xff1f; 示例 …

cefsharp120.1.8(cef120.1.8,Chromium120.0.6099.109)版本升级测试,其他版本H264版本

此版本最新版cef120.1.8,Chromium120.0.6099.109 此更新包括一个高优先级安全更新 This update includes a high priority security update. 说明&#xff1a;本版本暂时不支持264&#xff0c;其他H264版本参考119,116&#xff0c;114&#xff0c;110&#xff0c;109等版本 c…

mysql innodb知识记录

官方文档 官网架构图 innodb 特性 内存 buffer pool 采用优化后的LRU算法&#xff0c; 3/8 of the buffer pool is devoted to the old sublist.The midpoint of the list is the boundary where the tail of the new sublist meets the head of the old sublist.When In…

地牢边缘 DUNGEON LIMBUS中文免安装版

​《地牢边缘》是一款点阵图形式的像素风经典迷宫探索类游戏。玩家需要在游戏中收集多种装备&#xff0c;随机生成的无限地下城。在生死之际遇见的迷之铁匠和管理复活之村的年轻女性。为了找回遗失的记忆&#xff0c;进入更深的地下城。玩家还可以发展村落以及进化武器的多样化…

亚信安慧AntDB数据库助力智慧高速建设

随着新型智慧交通业务的迅速发展&#xff0c;各地高速公路在管控、收费和监测方面的数据管理变得至关重要。智慧公路信息化建设已成为高速公路建设的核心。AntDB数据库在某省级客户中发挥关键作用&#xff0c;帮助构建协同共享、高效的统一智慧管理平台&#xff0c;为高速公路的…

javascript 数组处理的两个利器: `forEach` 和 `map`(上)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

【AI基础设施】智算场景的资源管理系统与未来展望

高性能计算与智算场景 首先澄清两个概念&#xff0c;高性能计算与智算场景&#xff0c;高性能计算主要是面向天气预测、生物计算、材料计算等场景&#xff0c;而最近几年很火的智算主要是面向AI场景的计算&#xff0c;如语音识别、图像识别、自动驾驶等场景&#xff0c;我们可…

算法学习——栈与队列

栈与队列 栈与队列理论基础用栈实现队列思路代码 用队列实现栈思路代码 删除字符串中的所有相邻重复项思路代码 有效的括号思路代码 逆波兰表达式求值思路代码 滑动窗口最大值思路代码未完待续 前 K 个高频元素思路代码拓展 总结栈在系统中的应用括号匹配问题字符串去重问题逆波…