【算法题】螺旋矩阵II (求解n阶Z形矩阵)

一、问题的提出

nZ 形矩阵的特点是按照之(Z )字形的方式排列元素。nZ 形矩阵是指矩阵的大小为n ×n ,其中n 为正整数。

题目描述

一个 nn 列的螺旋(Z 形)矩阵如图1所示,观察并找出填数规律。

图1 7行7列和8行8列的螺旋(Z 形)矩阵

现在给出矩阵大小 n ,请你输出该矩阵。

输入格式

输入一个整数 n (1≤n ≤1000),表示矩阵大小。

输出格式

输出 nn 列,表示所求的矩阵。

输入输出样例

二、解决的思路

图2 矩阵生成原理图

根据题目描述、样例和图2可知:矩阵为n ×n ,其中偶数行(第一行为0行)从左向右排列元素;奇数行(第一行为0行)从右向左排列元素。

三、矩阵生成算法

nn 列,偶数行(第一行为0行)从0~n -1生成元素;奇数行(第一行为0行)从n -1~0生成元素。

程序代码如下:

python 复制代码
N = 5
def prt(b):                           # 打印二维列表
    for i in range(N):
        for j in range(N):
            print("%3d" % b[i][j], end='')
        print()

def Helix_MatrixII(n):
    cnt = 1
    for i in range(n):                # 生成n行
        if i % 2 == 0:                # 偶数行
            for j in range(n):        # 由左向右(j为0~n-1)生成
                matrix[i][j] = cnt
                cnt += 1
        else:                         # 奇数行
            for j in range(n):        # 由右向左(j为n-1~0)生成
                matrix[i][n-1-j] = cnt
                cnt += 1

matrix = []                           # 初始化二维矩阵matrix(二维列表)
for i in range(N):
    matrix.append([])
    for j in range(N):
        matrix[i].append(0)
Helix_MatrixII(N)
prt(matrix)

执行结果:

|----|----|----|----|----|
| 1 | 2 | 3 | 4 | 5 |
| 10 | 9 | 8 | 7 | 6 |
| 11 | 12 | 13 | 14 | 15 |
| 20 | 19 | 18 | 17 | 16 |
| 21 | 22 | 23 | 24 | 25 |

四、题目求解算法

按题目要求:输入矩阵大小 n ,输出该矩阵。

python 复制代码
def prt(b):                           # 打印二维列表
    for i in range(N):
        for j in range(N):
            print("%3d" % b[i][j], end='')
        print()

def Helix_MatrixII(n):
    cnt = 1
    for i in range(n):                # 生成n行
        if i % 2 == 0:                # 偶数行
            for j in range(n):        # 由左向右(0~n-1)生成
                matrix[i][j] = cnt
                cnt += 1
        else:                   # 奇数行
            for j in range(n):        # 由左向右(n-1~0)生成
                matrix[i][n-1-j] = cnt
                cnt += 1

N = int(input())
matrix = []                           # 初始化二维矩阵matrix(二维列表)
for i in range(N):
    matrix.append([])
    for j in range(N):
        matrix[i].append(0)
Helix_MatrixII(N)
prt(matrix)

输入8,输出为

相关推荐
爱笑的眼睛1120 分钟前
PyTorch Lightning:重新定义深度学习工程实践
java·人工智能·python·ai
0思必得039 分钟前
[Web自动化] HTTP/HTTPS协议
前端·python·http·自动化·网络基础·web自动化
纵有疾風起1 小时前
C++——多态
开发语言·c++·经验分享·面试·开源
稚辉君.MCA_P8_Java1 小时前
Gemini永久会员 Java实现的暴力递归版本
java·数据结构·算法
冯诺依曼的锦鲤1 小时前
算法练习:差分
c++·学习·算法
rgb2gray2 小时前
增强城市数据分析:多密度区域的自适应分区框架
大数据·python·机器学习·语言模型·数据挖掘·数据分析·llm
有意义2 小时前
栈数据结构全解析:从实现原理到 LeetCode 实战
javascript·算法·编程语言
鹿鹿鹿鹿isNotDefined2 小时前
逐步手写,实现符合 Promise A+ 规范的 Promise
前端·javascript·算法
氵文大师2 小时前
A机通过 python -m http.server 下载B机的文件
linux·开发语言·python·http
程序员爱钓鱼2 小时前
用 Python 批量生成炫酷扫光 GIF 动效
后端·python·trae