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

相关推荐
微学AI35 分钟前
内网穿透的应用-服务器日志出现异常怎么办?Python监控、钉钉告警与远程处理教程
服务器·python·钉钉
圣光SG8 小时前
Java操作题练习(七)
java·开发语言·算法
_Jimmy_9 小时前
Agent 溯源精度提升方案
人工智能·python·langchain
Cx330_FCQ9 小时前
Tmux使用
服务器·git·算法
SamChan9010 小时前
在Web应用中集成PDF多语言翻译功能:PDFTranslator API实战指南
前端·python·ai·pdf·yapi·机器翻译
天天进步201510 小时前
Python全栈项目--智能办公自动化系统
开发语言·python
拳里剑气11 小时前
C++算法:多源BFS
c++·算法·宽度优先·多源bfs
颜酱11 小时前
09 | 重构项目结构
人工智能·python·langchain
ysa05103011 小时前
【板子】短序列dp(换成维护更小常数维度的dp)
c++·笔记·算法·板子
shwill12311 小时前
PID 算法(三)--- 增量 PID ↔ 单神经元 PID 等价映射
linux·算法