【算法题】螺旋矩阵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,输出为

相关推荐
apocelipes8 小时前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
HjhIron9 小时前
面试常客:字符串算法从入门到进阶
算法·面试
用户8356290780519 小时前
使用 Python 在 PDF 中创建与管理书签
后端·python
吴佳浩11 小时前
DeepSeek DSpark:Confidence-Scheduled Speculative Decoding 技术解析
人工智能·算法·deepseek
触底反弹12 小时前
🧠 搞懂 Token,才算真正入门大模型——从分词原理到 Embedding 语义实战
javascript·人工智能·算法
MeixianAgent14 小时前
Python 回测数据入口怎么验?历史 K 线入库前先做 5 个检查
后端·python
vivo互联网技术16 小时前
ICLR 2026 | 基于后验采样的图像恢复方法LearnIR:人脸去阴影、去雾
人工智能·算法·aigc
咕白m62517 小时前
用 Python 实现一键批量查找与替换 Excel 数据
后端·python
浮生望18 小时前
JS字符串与回文算法:从包装类到双指针的面试进阶之路
javascript·算法
黄敬峰18 小时前
面试必刷:从JS底层包装类到双指针,彻底搞懂字符串与回文算法
算法