首页 > 其他分享 >螺旋矩阵

螺旋矩阵

时间:2023-04-17 23:15:38浏览次数:33  
标签:count nums 螺旋 矩阵 range offset

螺旋矩阵

52-螺旋矩阵

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

示例 1:

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

Python

解一:

class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        resmatrix = [[0] * n for _ in range(n)]
        i = 0
        loop = 0
        count = 1
        num = 4 * (n - 1)
        if n == 1:
            resmatrix[0][0] = 1
            return resmatrix
        while count <= n * n:
            for i in range(num):
                if i <= num / 4 - 1:
                    resmatrix[loop][loop + i] = count
                    count += 1
                elif i > num / 4 - 1 and i <= 2 * num / 4 - 1:
                    resmatrix[int(loop + (i - num/4))][int(loop + num/4)] = count
                    count += 1
                elif i > 2 * num / 4 - 1 and i <= 3 * num / 4 - 1:
                    resmatrix[int(loop + num / 4)][int(loop+num/4-(i-2*num/4))] = count
                    count += 1
                else:
                    resmatrix[int(loop + num / 4 - (i - 3 * num / 4))][loop] = count
                    count += 1
            num -= 8
            loop += 1
            if num == 0:
                resmatrix[loop][loop] = n*n
                count += 1
        return resmatrix

解二:

class Solution(object):
    def generateMatrix(self, n):
        """
        :type n: int
        :rtype: List[List[int]]
        """
        nums = [[0] * n for _ in range(n)]
        startx, starty = 0, 0              
        loop, mid = n // 2, n // 2          
        count = 1                          

        for offset in range(1, loop + 1) :  
            for i in range(starty, n - offset) : 
                nums[startx][i] = count
                count += 1
            for i in range(startx, n - offset) :  
                nums[i][n - offset] = count
                count += 1
            for i in range(n - offset, starty, -1) : 
                nums[n - offset][i] = count
                count += 1
            for i in range(n - offset, startx, -1) : 
                nums[i][starty] = count
                count += 1                
            startx += 1   
            starty += 1

        if n % 2 != 0 :
            nums[mid][mid] = count 
        return nums

笔记

  1. 对于此种问题,可以设法将其分解为一个个相似的过程(例如螺旋矩阵中的每一圈),抓住这些过程有哪些要素是相似的(在螺旋矩阵每圈中,四个角的坐标的计算),哪些要素是不变的(每圈中元素之间的关系都是顺时针依次+1),再从不变的因素出发,将相似的部分与变量联系起来,最终达到分析整个过程的目的;
  2. 需要特别注意一些特殊情况,例如解一中螺旋矩阵仅有一个元素时和解二中螺旋矩阵的中心(若n为奇数);
  3. 解一解二的思路是相同的,但在一些细节的处理上存在差异例如对每一圈中坐标的计算,解一中每圈起点点初始设置为(loop,loop),而解二中起点坐标则是通过startx,starty不断加1得到。

标签:count,nums,螺旋,矩阵,range,offset
From: https://www.cnblogs.com/zhiyue-bit/p/17327893.html

相关文章

  • 根据负荷响应特性将需求响应分为价格型和替代型 2 类,分别建立了基于价格弹性矩阵的价
    MATLAB代码碳交易机制   需求响应  综合能源系统 优化运行首先,根据负荷响应特性将需求响应分为价格型和替代型2类,分别建立了基于价格弹性矩阵的价格型需求响应模型,及考虑用能侧电能和热能相互转换的替代型需求响应模型;其次,采用基准线法为系统无偿分配碳排放配额,并......
  • 考虑IEEE33节点系统使用基本环矩阵编码的智能优化算法在处理配电网重构问题
    matlab 改进灰狼算法 含分布式电源 配电网重构考虑IEEE33节点系统使用基本环矩阵编码的智能优化算法在处理配电网重构问题中,通常使用无序的解空间,解空间中局部峰值较多,使得智能优化算法难以发挥自身优势,耗时严重且难以寻找到最优解。针对以上问题,提出一种有序环网编码方式......
  • 【剑指 Offer】 29. 顺时针打印矩阵
    【题目】输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 示例1:输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例2:输入:matrix= [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7] 限制:0<=matrix.leng......
  • 不规则矩阵转两列(Power Query)
    问题:A1:E6是不规则的矩阵,其中第一行是标题。需要将其转换成G:H两列。let源=Excel.CurrentWorkbook(){[Name="表1"]}[Content],已添加索引=Table.AddIndexColumn(源,"索引"),逆透视的其他列=Table.UnpivotOtherColumns(已添加索引,{"索引"},"标题1","标......
  • PAT Basic 1097. 矩阵行平移
    PATBasic1097.矩阵行平移1.题目描述:给定一个 \(n×n\) 的整数矩阵。对任一给定的正整数 \(k<n\),我们将矩阵的奇数行的元素整体向右依次平移\(1、……、k、1、……、k、……\)个位置,平移空出的位置用整数 \(x\) 补。你需要计算出结果矩阵的每一列元素的和。2.输入格......
  • 对矩阵乘以矩阵的转置和矩阵进行奇异值分解得到的向量是一样的。
    w=rand(4,6)[Ud,Sd,Vd]=svds(w/6,4)[Ud1,Sd1,Vd1]=svds(w*w'/6,4)发现Ud和Ud1的向量值是一样的,或者是相反的。  ......
  • 矩阵
    1.矩阵快速幂structmatrix{llmat[N][N];}a;matrixoperator*(constmatrix&a,constmatrix&b){ matrixc; memset(c.mat,0,sizeof(c.mat)); for(inti=0;i<N;i++){ for(intj=0;j<N;j++){ for(intk=0;k<N;k++){ c.mat[i][j]=(c.mat[i][j]+a.......
  • c语言实现矩阵相乘
    一、问题描述。用动态二维数组的知识进行矩阵相乘。二、设计思路。1、申请两个动态二维数组。2、输入两个矩阵的行数和列数。3、如果满足前一个矩阵的列数等于第二个矩阵的行数,就让前一个矩阵的x行的第y个元素乘以后一个矩阵的x列的第y的元素。4、以矩阵的形式输出。三、程......
  • Android兼容性矩阵
    起因新上的设备,发现hal不支持,因此记录下,下图已经是修复了正常的了36的对应的native函数是android_location_GnssLocationProvider_is_supported,这一看就是hal没有staticjbooleanandroid_location_GnssLocationProvider_is_supported(JNIEnv*/*env*/,jclas......
  • AutoCAD.NET:矩阵和变换–矩阵信息
      [CommandMethod("Matrix_PrintOut")]publicstaticvoidMatrix_PrintOut(){Editored=MgdAcApplication.DocumentManager.MdiActiveDocument.Editor;Databasedb=HostApplicationServices.WorkingDatabase;try{Matrix3didentityM......