☆打卡算法☆LeetCode 59、螺旋矩阵 II 算法解析

本文涉及的产品
云解析DNS,个人版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: “给定一个正整数,按顺时针顺序螺旋排列生成矩阵。”

一、题目


1、算法题目

“给定一个正整数,按顺时针顺序螺旋排列生成矩阵。”

题目链接:

来源:力扣(LeetCode)

链接:59. 螺旋矩阵 II - 力扣(LeetCode) (leetcode-cn.com)


2、题目描述

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

网络异常,图片无法展示
|

示例 1:
输入: n = 3
输出: [[1,2,3],[8,9,4],[7,6,5]]
复制代码
示例 2:
输入: n = 1
输出: [[1]]
复制代码


二、解题


1、思路分析

这个题跟螺旋矩阵的区别在于,螺旋矩阵是已经排列好的,然后进行旋转。

而本题是根据输入的正整数,生成螺旋矩阵。

初始位置在矩阵的左上角,初始方向向右,若下一步的位置超过边界,或者是之间访问的文职, 则顺时针旋转,如此反复填充所有元素。


2、代码实现

代码参考:

public class Solution {
    public int[][] GenerateMatrix(int n) {
        int[][] res = new int[n][];
            for(int i=0; i<n;i++ )
            {
                res[i] = new int[n];
            }
            int lC = n;//剩余列长度
            int hC = n;//剩余行长度
            int l = 0;//当前的列位置
            int h = 0;//当前的行位置
            int num = 1;//该位置上的数字
            while(lC>0&&hC>0)
            {
                for(int i=0;i<lC ;i++,l++,num++ )//从第一行开始从左往右放数字
                {
                    res[h][l] = num;
                }
                l--;//调整下一个位置
                h++;
                hC--;
                if(hC==0)//判断结束,总行数和总列数一样,而列数先减少,所以剩余行数会比剩余列数快减少至0
                {
                    break;
                }
                for(int i=0;i<hC ;i++,h++,num++ )//从最后一列开始从上到下放数字
                {
                    res[h][l] = num;
                }
                h--;
                l--;
                lC--;
                for(int i=0; i<lC;i++,l--,num++)
                {
                    res[h][l] = num;
                }
                l++;
                h--;
                hC--;
                if(hC==0)
                {
                    break;
                }
                for(int i=0;i<hC ;i++,h--,num++ )
                {
                    res[h][l] = num;
                }
                h++;
                l++;
                lC--;
            }
            return res;
    }
}
复制代码

网络异常,图片无法展示
|


3、时间复杂度

时间复杂度 : O(n2)

其中n是数组的长度,只需要遍历一遍数组即可求得答案。

空间复杂度: O(1)

只需要常数级别的空间存放变量。


三、总结

依旧是按层模拟的解题方法。



相关文章
|
5天前
|
机器学习/深度学习 算法 数据挖掘
算法金 | K-均值、层次、DBSCAN聚类方法解析
**摘要:** 这篇文章介绍了聚类分析的基本概念和几种主要的聚类算法。聚类是无监督学习中用于发现数据内在结构的技术,常用于市场分析、图像分割等场景。K-均值是一种基于划分的算法,简单高效但易受初始值影响;层次聚类包括凝聚和分裂方式,形成层次结构但计算复杂;DBSCAN基于密度,能处理任意形状的簇,但参数选择敏感。文章还讨论了这些算法的优缺点和适用场景,并提供了相关资源链接和Python实现。
28 9
算法金 | K-均值、层次、DBSCAN聚类方法解析
|
1天前
|
算法 安全 Java
深入解析ECC(椭圆曲线密码学)加解密算法
深入解析ECC(椭圆曲线密码学)加解密算法
深入解析ECC(椭圆曲线密码学)加解密算法
|
1天前
|
存储 算法 安全
深入解析消息认证码(MAC)算法:HmacMD5与HmacSHA1
深入解析消息认证码(MAC)算法:HmacMD5与HmacSHA1
|
1天前
|
存储 算法 安全
深入解析RSA算法原理及其安全性机制
深入解析RSA算法原理及其安全性机制
|
1天前
|
存储 算法 安全
MD5哈希算法:原理、应用与安全性深入解析
MD5哈希算法:原理、应用与安全性深入解析
|
1天前
|
算法 安全 Java
AES加解密算法:原理、应用与安全性解析
AES加解密算法:原理、应用与安全性解析
|
3天前
|
搜索推荐 算法 大数据
​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
|
3天前
|
负载均衡 Kubernetes 算法
服务网格 ASM 负载均衡算法全面解析
在本文中,笔者将解析服务网格的多种负载均衡算法的实现原理和使用场景,为服务网格负载均衡算法的选择提供参考。
|
4天前
|
机器学习/深度学习 算法 TensorFlow
Inception v3算法的实战与解析
Inception v3算法的实战与解析
8 0
|
8天前
|
存储 算法 Java
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集
面试高频算法题汇总「图文解析 + 教学视频 + 范例代码」之 二分 + 哈希表 + 堆 + 优先队列 合集

推荐镜像

更多