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

相关推荐
qq5918406854 小时前
uiautomator2自动化安卓手机操作
python
80s7775 小时前
动态代理和静态代理的区别,动态代理怎么提高网络安全性
python
v_34836087625 小时前
Android native端 堆栈打印
android·算法
residual_fan5 小时前
【学术论文】航空发动机故障诊断智能体:基于持续对比强化学习的动态优化方法
人工智能·算法·数据挖掘·数据分析
GreenTea6 小时前
OpenAI Agents API 上手实测:一次调用把整个 agent loop 甩给 OpenAI
前端·后端·算法
niucloud-admin6 小时前
JAVA V6 多商户商城 开发文档——job 计划任务开发
java·python·github
小叶肥辉6 小时前
LangChain链和LangGraph图的学习笔记【三】——分别用langchain_openai库和langchain_community库调用大模型
笔记·python·langchain
深圳满意度咨询7 小时前
医院满意度数字化测评系统:从数据采集到智能决策的技术实践
算法
2401_873479407 小时前
IP属地为什么有时显示外省?用IP查询工具核查动态分配、运营商出口与GeoIP库
python·tcp/ip·ip
xiangyun618 小时前
【408数据结构 08】队列:循环队列判空判满,408年年考,一次讲清
c语言·开发语言·数据结构·c++·算法