矩阵 螺旋矩阵

简介: 矩阵 螺旋矩阵

1.螺旋矩阵

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

输入:n = 3

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

9f23608ff78944f8bfc96b8513d1fb1d.png

def generateMatrix(n):
    nums=[[0]*n for _ in range(n)]
    start_x=0
    start_y=0
    offset=1 
    s=n//2 要进行的圈数
    count=1 # 从1开始进行螺旋
    loop = n//2
    for offset in range(1, loop + 1) : 
        for i in range(start_x,n-offset): #从左到右
                 nums[start_x][i]=count
                 count+=1
        for i in range(start_y,n-offset):  #上到下
                 nums[i][n-offset]=count
                 count+=1
        for i in range(n-offset,start_y,-1):  #从右到左
                 nums[n-offset][i]=count
                 count+=1
        for i in range(n-offset,start_x,-1):  # 从上到下
                 nums[i][start_y]=count
                 count+=1
        start_x+=1
        start_y+=1
    if s%2!=0:
            nums[s][s]=n**2
    return nums

2.螺旋矩阵

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

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

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

e13c4d5394224c57aec9c937814dafaa.png

def spiralOrder(matrix):
    l,r,t,b=0,len(matrix[0])-1,0,len(matrix)-1
    nums=[]
    while True:
        for i in range(l,r+1):
                a.append(martix[t][i])
        t+=1
        if t>b:
           break
        for i in range(t,b+1):
                a.append(martix[r][i])
        r-=1
        if l>r:
            break
        for i in range(r,l-1,-1):
                a.append(matrix[b][i])
        b-=1
        if t>b:
            break
        for i in range(b,t-1,-1):
                a.append(martix[i][l])
        l+=1
        if l>r:
            break
    return nums

3.螺旋遍历二维数组

给定一个二维数组 array,请返回「螺旋遍历」该数组的结果。

螺旋遍历:从左上角开始,按照 向右、向下、向左、向上 的顺序 依次 提取元素,然后再进入内部一层重复相同的步骤,直到提取完所有元素。

def spiraarry(array):
     if array==[]:
            return []
     nums=[]
     l,r,t,b=0,len(array[0])-1,0,len(array)-1
     while True:
            for i in range(l,r+1):
                nums.append(array[t][i])
            t+=1
            if t>b:
                break
            for i in range(t,b+1):
                nums.append(array[i][r])
            r-=1
            if l>r:
                break
            for i in range(r,l-1,-1):
                nums.append(array[b][i])
            b-=1
            if t>b:
                break
            for i in range(b,t-1,-1):
                nums.append(array[i][l])
            l+=1
            if l>r:
                break
      return nums


相关文章
|
C# 开发者 Windows
基于Material Design风格开源、易用、强大的WPF UI控件库
基于Material Design风格开源、易用、强大的WPF UI控件库
1652 0
|
机器学习/深度学习 API 开发工具
通义千问API入门教程
本教程将带你从零开始,快速了解如何通过 API 使用通义千问大模型,并尝试使用大模型 API 开发一些简单的应用应用到工作中,提升效率。
|
存储 自然语言处理 算法
|
8月前
|
前端开发
前端开发 之 15个页面加载特效下【附完整源码】
本篇文章内容展示了铜钱3D圆环加载、圆环显现加载、扇形百分比加载等页面炫酷加载特效,并给出了完整的代码及注释
377 9
|
5月前
|
人工智能 自然语言处理 搜索推荐
文旅行业不会消失,但岗位会:现在学AI还来得及
导游、计调、景区票务……传统文旅岗位正在被AI重塑。但危机即转机:掌握AI工具、成为智能体时代的文旅服务者,现在入场正当时。
|
7月前
|
运维 安全 中间件
软件系统功能测试与质量保障技术文档
本文档规范软件功能测试全流程,涵盖测试目标、范围、环境、用例设计、执行、缺陷分级与闭环管理,以及质量评估标准和风险应对措施,旨在保障系统功能完整、业务正确、运行稳定,支撑高质量交付与运维。(239字)
480 0
|
10月前
|
开发框架 弹性计算 运维
建站系统哪个好?2025年建站系统深度推荐与避坑指南
建站系统分传统CMS(如PageAdmin)、SaaS平台(如阿里云速成美站)和开发框架三类。选择时需权衡控制权、成本与效率,根据业务需求、技术能力和长期规划理性选型,优先验证可行性再迭代升级。
1112 0
|
安全 数据可视化 数据安全/隐私保护
提升 AD 管理效率:权限委派的两次进化
本文探讨AD权限委派的演进:从原生“委派控制向导”的粗粒度管理,到细粒度角色化委派的精准控制。通过定义角色、绑定范围、动态赋权,实现权限最小化、审计可视化、跨域统一化,提升安全与效率。AD治理迈向自动化闭环,让权限管理不再依赖“Domain Admin”式放权。
390 4
|
存储 机器学习/深度学习 算法
基于 C++ 的局域网访问控制列表(ACL)实现及局域网限制上网软件算法研究
本文探讨局域网限制上网软件中访问控制列表(ACL)的应用,分析其通过规则匹配管理网络资源访问的核心机制。基于C++实现ACL算法原型,展示其灵活性与安全性。文中强调ACL在企业与教育场景下的重要作用,并提出性能优化及结合机器学习等未来研究方向。
419 4
|
缓存 算法 Java
【Java 程序员面试 + 学习指南】覆盖互联网一线大厂 Java 程序员所需面试知识点与技巧
本指南专为Java程序员准备互联网大厂面试而设,涵盖面试知识点与技巧两大部分。知识点包括Java基础(面向对象、集合框架、并发编程)、JVM(内存分区、回收机制、类加载机制)、数据库(MySQL、Redis)、开发框架(Spring、Spring Boot、MyBatis)及其他相关技术(计算机网络、操作系统)。面试技巧涉及简历撰写、项目经验阐述及答题策略,助你全面提升面试成功率。提供资源链接,支持深入学习。
498 4