题解 | #蛇形矩阵#

蛇形矩阵

https://www.nowcoder.com/practice/649b210ef44446e3b1cd1be6fa4cab5e

#思路其实不难,就是数分里证明有理数是可列个的对角线排法。
#每次其实就是寻找二维矩阵中x,y坐标相加为0的(x,y)坐标对,相加为1的(x,y)坐标对……同时要求x>=y(先纵后横)
import sys
n = int(input())
m = int((n+1)*n/2) #计算出总共需要的数值个数m
lst = list(range(1,m+1))  #初始化range(m)列表
res = [[0]*n for _ in range(n)]  
#初始化二维空列表,一定要这么写。如果写成[[0]*n]*n的话,赋值的时候会整列赋值,不是本意。
for i in range(n): #i取0到n-1,注意i是坐标的索引,最大是n-1
    for j in range(i+1): #j取0到i。j是可以等于i的。
        res[i-j][j] = lst.pop(0)  #先纵向后横向排列数值,利用lst.pop返回去除值的特性
res = [[_ for _ in x if _!=0] for x in res]  #把结果中各列表的0去掉,形成二维列表。
res = [' '.join([str(_) for _ in x]) for x in res]  #把每行的元素用空格拼起来
print(*(res),sep='\n') #逐行打印并用回车分隔,print('\n'.join(res))亦可。

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务