python螺旋数字矩阵

该篇文章介绍了如何用Python编写一个函数getRes,根据输入的数字个数n和行数m生成一个按顺时针螺旋顺序填充的矩阵,遇到边界或已有数字时调整方向。示例展示了不同参数下的矩阵生成过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python螺旋数字矩阵

给出数字个数n (0<n ≤999)和行数m (0<m ≤ 999)。从左上角的1开始,按照顺时针螺旋向内写方式,输出1-n,依次写出2,3.….,最终形成一个m行的矩阵。
1.每行数字的个数一样多
2.列的数量尽可能少
3.填充数字时优先填充外部
4.数字不够时,使用单个*号占位

def getRes(n, m):
    num_size = n
    rows = m

    cols, _ = divmod(n, m)
    cols = cols + 1 if _ else cols # 列数

    res = [['*'] * cols for _ in range
### 螺旋矩阵的定义与实现 螺旋矩阵是一种按照特定顺序排列数值的二维数组结构,通常从左上角开始按顺时针方向依次填充数字。以下是基于 Python 的一种实现方式: #### 使用迭代法生成螺旋矩阵 通过设定边界条件并逐步缩小范围来完成矩阵填充。 ```python def generate_spiral_matrix(n): matrix = [[0] * n for _ in range(n)] top, bottom = 0, n - 1 left, right = 0, n - 1 num = 1 while top <= bottom and left <= right: # 填充顶部行 (从左到右) for i in range(left, right + 1): matrix[top][i] = num num += 1 top += 1 # 填充右侧列 (从上到下) for i in range(top, bottom + 1): matrix[i][right] = num num += 1 right -= 1 if top <= bottom: # 填充底部行 (从右到左) for i in range(right, left - 1, -1): matrix[bottom][i] = num num += 1 bottom -= 1 if left <= right: # 填充左侧列 (从下到上) for i in range(bottom, top - 1, -1): matrix[i][left] = num num += 1 left += 1 return matrix # 测试函数 n = 5 result = generate_spiral_matrix(n) for row in result: print(row) ``` 上述代码实现了大小为 `n×n` 的螺旋矩阵生成逻辑[^1]。它利用四个变量 (`top`, `bottom`, `left`, `right`) 来控制当前待填充区域的边界,并随着每次循环逐渐向中心收缩。 #### 输出示例 对于输入参数 `n=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] ``` 此输出形式完全匹配给定引用中的样例数据[^2]。 --- ### 矩阵操作扩展功能 除了生成螺旋矩阵外,还可以进一步探索其他相关操作,例如转置、旋转等。 #### 矩阵逆时针旋转 90 度 如果需要对已有的螺旋矩阵进行变换,则可以采用以下方法将其逆时针旋转 90°: ```python import numpy as np def rotate_anticlockwise(matrix): rotated = list(zip(*matrix))[::-1] return [list(row) for row in rotated] original_matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] rotated_matrix = rotate_anticlockwise(original_matrix) print(rotated_matrix) ``` 该技术的核心在于先将原矩阵解包并通过 `zip()` 函数重新组合成新的行列关系,随后反转列表顺序以达成最终效果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值