• 769. 螺旋矩阵(经典)


    769. 螺旋矩阵

    中文English

    给出整数 n, 返回一个大小为 n * n 的螺旋矩阵

    样例

    样例 1:

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

    样例 2:

    输入 : n = 5
    输出 : 
    [
     [1,2,3,4,5]
     [16,17,18,19,6]
     [15,24,25,20,7]
     [14,23,22,21,8]
     [13,12,11,10,9]
    ]
    class Solution:
        '''
         大致思路:
         1.给出初始值dic=[[0,0,0],...],p=r,x=0,y=0
         2.有4个临界值,这4个临界值会随着走的过程发生变化。分别为x_l,x_r,y_u,y_d,值分别是0,n-1,1,n-1 (特别注意,有一个临界值y_u=1,因为最开始从[0][0]出发,占了一位)
         2.p为走的方向,r,d,l,u。如果p==r的时候,x不变,y+1,直到y==临界值时候(此时需要转换方向),p赋值为d。其他一样按此情况赋值,和走
         3.然后最后的时候对dic赋值dic[x][y]=num,返回
         注意:x_l,x_r,y_u,y_d分别为x轴左右临界值,y轴上下临界值。r,d,l,u分别代表走的方向为右,下,左,上。
        '''
        def spiralArray(self,n):
            ##初始化
            dic,p,x,y=[],'r',0,0
            #特别注意对dic的初始化,早先开始就知道有列表的长度,所以都已经赋好了初始值0,每走一步就赋新值。
            for i in range(n):
                dic.append([0]*n)
    
            #给定初始临界x和临界y,每次走到临界,临界x和临界y都会发生变化(注意,y_u初始为1,因为开始的位置从[0][0]开始,本身就占了一位,所以往上临界值应该为1就停)
            x_l,x_r,y_u,y_d = 0,n-1,1,n-1
    
            for num in range(1,n*n+1):
                dic[x][y]=num
                #向右边走,x不变,y+1
                if p == 'r' and y < x_r:
                    y += 1
                    #如果到临界值的话,p改变方向
                    if y == x_r:
                        x_r = x_r - 1
                        p = 'd'
                elif p == 'd' and x < y_d:
                    x += 1
                    if x == y_d:
                        y_d = y_d - 1
                        p = 'l'
                elif p == 'l' and y > x_l:
                    y -= 1
                    if y == x_l:
                        x_l = x_l + 1
                        p = 'u'
                elif p == 'u' and x > y_u:
                    x -= 1
                    if x == y_u:
                        
                        y_u = y_u + 1
                        p = 'r'      
            return dic
    
    
  • 相关阅读:
    结对四则运算04—网页版
    每周总结07
    每周总结06
    求循环数组中最大子数组的和
    每周总结05
    每周总结03
    每周总结04
    四则运算03
    开发过程记录
    Ubuntu下安装mysql和可视化工具超级简单教程
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12562500.html
Copyright © 2020-2023  润新知