zoukankan      html  css  js  c++  java
  • 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
    
    
  • 相关阅读:
    System.arraycopy
    关于验证控件和javaSript验证的共存问题
    正则表达式经典
    css的一些基础的东西
    运用JAVASCRIPT,写一个类,类名:student,他的属性:name,age,tall,他的方法:getName,getAge,getTall
    转: ASP.NET 应用程序生命周期概述
    转:关于 Global.asax 文件
    今天又要过去了,学习点东西!
    javaScript对象和属性
    转载:.NET 2005 实现在线人数统计
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12562500.html
Copyright © 2011-2022 走看看