zoukankan      html  css  js  c++  java
  • 力扣59-螺旋矩阵 II

    原题 https://leetcode-cn.com/problems/spiral-matrix-ii/

    这道题目为 这道题目的升级款版本

    https://www.cnblogs.com/wang102030/p/14539838.html

    可以沿用上道题目的逆方向思考。

    class Solution:
        def generateMatrix(self, n: int) -> List[List[int]]:
            if n == 0:
                return []
            if n == 1:
                return [[1]]   
            matrix = list(range(1,n**2+1))
            new_matrix = [[0 for _ in range(0,n)] for _ in range(0,n)]
            x,y = 0,0
            M,N = len(new_matrix),len(new_matrix[0]) 
            dirs = [(0,1),(1,0),(0,-1),(-1,0)]
            left,right,up,dowm = 0,N-1,0,M-1 
            cur_d = 0
            for num in  matrix:
                new_matrix[x][y] = num
                if cur_d == 0 and y == right:
                    cur_d += 1
                    up += 1
                elif cur_d == 1 and x == dowm:
                    cur_d += 1
                    right -= 1
                elif cur_d == 2 and y == left:
                    cur_d += 1
                    dowm -= 1
                elif cur_d == 3 and x == up:
                     cur_d += 1
                     left += 1
                cur_d %= 4
                x += dirs[cur_d][0]
                y += dirs[cur_d][1]
            return new_matrix
    

      

      个人理解 : 对于这种问题的思考就是,可以一步一步走,碰到边界转化方向。通过 dirs 管理方向 右 下 左 上

      边界:下一步坐标小于零或者出了原始矩阵最大值或者是一个非零数字则转化方向。

    class Solution:
        def generateMatrix(self, n: int) -> List[List[int]]:
            dirs = [(0,1),(1,0),(0,-1),(-1,0)]
            count = 0
            car_d = 0 
            x, y =0,0
            res = [[0] * n for _ in range(n) ]
            while count != n ** 2:
                count += 1
                res[x][y] = count 
                dx,dy = dirs[car_d][0],dirs[car_d][1]
                newx,newy = x + dx,y +dy # 下一步
                # 如果下一步到了边界 转化方向
                # 边界定义出了矩阵, 喷到到非零的数字
                if newx<0 or newx>= n or newy < 0 or newy >=n or res[newx][newy] != 0:
                     car_d = (car_d+1) % 4 
                     dx , dy = dirs[car_d][0],dirs[car_d][1]
                x ,y = x +dx,y+dy
            return res
    

      

  • 相关阅读:
    python Asyncore.dispatcher 理解
    COCOA® PROGRAMMING FOR MAC® OS X (2)- Speak Line
    COCOA® PROGRAMMING FOR MAC® OS X (1)- Get Start
    Objetive-C initialize研究
    Objetive-C +load方法研究
    Python创建多进程,用Queue传递信息
    Python 中的GIL
    IOS CrackMe 破解学习
    越狱手机发送短信
    Vue 子组件向父组件传参
  • 原文地址:https://www.cnblogs.com/wang102030/p/14545709.html
Copyright © 2011-2022 走看看