美文网首页算法学习
算法题--按顺时针顺序填充二维数组

算法题--按顺时针顺序填充二维数组

作者: 岁月如歌2020 | 来源:发表于2020-04-15 00:45 被阅读0次
image.png

0. 链接

题目链接

1. 题目

Given a positive integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.

Example:

Input: 3
Output:
[
 [ 1, 2, 3 ],
 [ 8, 9, 4 ],
 [ 7, 6, 5 ]
]

2. 思路1:模拟NPC走格子

记录四个端点的位置left,right,top,bottom,四个方向右下左上,先从左到右,再从上到下,然后从右到左,最后从下到上,

终止条件为 left > right 或者 top > bottom, 表示没有格子需要处理了 

3. 代码

# coding:utf8
from typing import List


class Solution:
    def generateMatrix(self, n: int) -> List[List[int]]:
        DIRECTION_RIGHT = 1
        DIRECTION_DOWN = 2
        DIRECTION_LEFT = 3
        DIRECTION_UP = 4

        left = 0
        right = n - 1
        top = 0
        bottom = n - 1

        array = [[0] * n for _ in range(n)]

        value = 1
        i = 0
        j = 0
        array[i][j] = value
        direction = DIRECTION_RIGHT

        while left <= right and top <= bottom:
            if direction == DIRECTION_RIGHT:
                if j < right:
                    j += 1
                    value += 1
                    array[i][j] = value
                else:
                    direction = DIRECTION_DOWN
                    top += 1
            elif direction == DIRECTION_DOWN:
                if i < bottom:
                    i += 1
                    value += 1
                    array[i][j] = value
                else:
                    direction = DIRECTION_LEFT
                    right -= 1
            elif direction == DIRECTION_LEFT:
                if j > left:
                    j -= 1
                    value += 1
                    array[i][j] = value
                else:
                    direction = DIRECTION_UP
                    bottom -= 1
            elif direction == DIRECTION_UP:
                if i > top:
                    i -= 1
                    value += 1
                    array[i][j] = value
                else:
                    direction = DIRECTION_RIGHT
                    left += 1

        return array


def print_matrix(matrix):
    for each_list in matrix:
        print(each_list)

    print('=' * 50)


solution = Solution()
print_matrix(solution.generateMatrix(3))
print_matrix(solution.generateMatrix(5))

输出结果

[1, 2, 3]
[8, 9, 4]
[7, 6, 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]
==================================================

4. 结果

image.png

相关文章

  • 算法题--按顺时针顺序填充二维数组

    0. 链接 题目链接 1. 题目 Given a positive integer n, generate a s...

  • Leetcode.54.Spiral Matrix

    题目 给出一个二维数组, 让二维数组顺时针螺旋输出. 思路1 计算拐点, 确定方向. 但是计算比较复杂, 顺序是顺...

  • vue项目技术点总结(2020.05)

    1 一维数组给二维数组赋值 将一维数组内容按顺序赋值给不规则的二维数组(一维数组的长度与二维数组里的数组长度之和相...

  • 剑指offer 思路总结 python3 次序乱

    按牛客的顺序来,个人的刷题的一个总结,太水的没有特色的题就跳过了。。 1. 二维数组中的查找 题目描述在一个二维数...

  • 顺时针打印矩阵

    按照顺时针的顺序打印一个二维数组每次打印之前我们要记录开始的startX,endX,startY,endY;每次打...

  • 你没有关注过的二维数组遍历效率

    二维数组的排列顺序 数组在内存中是按行存储的,按行遍历时可以由指向数组的第一个数的指针一直向后遍历,由于二维数组的...

  • (2)数组相关算法题目

    数组是最简单的数据结构,占据连续内存并且按顺序存储。 以下是与数组有关的算法题目。 (1)查询数组中重复数字 算法...

  • 123

    题2: 实现单例类 - done 题3: 二维数据查找 - done 题14: 调整数组顺序,使奇数在前偶数在后 ...

  • 牛客网高频算法题系列-BM18-二维数组中的查找

    牛客网高频算法题系列-BM18-二维数组中的查找 题目描述 在一个二维数组array中(每个一维数组的长度相同),...

  • 2020-07-02

    算法和数据结构梳理 线性表 顺序表数组(移动、原地操作、前缀和)多数组(合并 交集二维数组(旋转、数独、染色、置零...

网友评论

    本文标题:算法题--按顺时针顺序填充二维数组

    本文链接:https://www.haomeiwen.com/subject/bjgfvhtx.html