大爽Python入门练习题 3-2 生成回形矩阵
第三章 中期练习题 困难 第2题
题目
简介
实现一个函数generate_matrix(m, n)
,
接受两个正整数m
和n
作为参数
返回一个m
行n
列的特殊矩阵(二维列表)。
该矩阵最外面一圈值都为0,
里面一圈为1,
再往里一圈都为2,
依次类推
详细说明
题意中,3
行4
列的特殊矩阵(二维列表)如下
matrix = [
[0, 0, 0, 0, 0, 0],
[0, 1, 1, 1, 1, 0],
[0, 1, 2, 2, 1, 0],
[0, 1, 1, 1, 1, 0],
[0, 0, 0, 0, 0, 0]
]
示例
示例一
matrix = generate_matrix(5, 6)
for row in matrix:
print(row)
输出为
[0, 0, 0, 0, 0, 0]
[0, 1, 1, 1, 1, 0]
[0, 1, 2, 2, 1, 0]
[0, 1, 1, 1, 1, 0]
[0, 0, 0, 0, 0, 0]
示例一
matrix = generate_matrix(7, 10)
for row in matrix:
print(row)
输出为
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 1, 1, 1, 1, 1, 1, 1, 0]
[0, 1, 2, 2, 2, 2, 2, 2, 1, 0]
[0, 1, 2, 3, 3, 3, 3, 2, 1, 0]
[0, 1, 2, 2, 2, 2, 2, 2, 1, 0]
[0, 1, 1, 1, 1, 1, 1, 1, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
分割线
本小段没有实际意义,
仅用于分隔题目和答案。
防止学生无意中直接看到答案,
影响思路。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
。
答案
思路来自直播彈幕:栢栢酱 說: aij=min(i,m-i,j,n-j)
感谢栢栢酱的思路:格子的值为到四个边界的最短距离
比我原本的思路好。我本来想的使用循环一层一层做,其实比较麻烦。
def get_min(*args):
# 其实也可以直接使用python内置函数`min`
# 我这里相当手动实现了一遍
min_v = args[0]
for v in args:
if v < min_v:
min_v = v
return min_v
def generate_matrix(m, n):
matrix = [
[get_min(ri, ci, n-ci-1, m-ri-1) for ci in range(n)]
for ri in range(m)
]
return matrix