题目意思是对 n阶方阵 打印出螺旋状的 0 吗?
题目说得不太明白,螺旋规则是什么,不知道这个对不对
- def spiralize(n):
- """输入矩阵规模size,打印螺旋蚊香状数列"""
- a = [[1 for j in range(n)]for i in range(n)] # 建n阶方阵(二维数组)
-
- begin,end = 0,n # 控制循环始末
- x,y = 0,0 # 控制数据坐标
-
- # 没加判断条件,所以循环一定是4的倍数才能停止
- # 所以不能被4整除的偶数项n=6、10、14...中间有多余1位的会变成0,跟题目不冲突就是了
- while end > begin:
-
- # 这里 begin-1 是为了新矩阵和旧矩阵的接入口也要用 0 接起来,第一次不影响
- for j in range(begin-1,end):
- a[x][j] = 0
- y = end-1
-
- for i in range(begin,end):
- a[i][y] = 0
- x = end-1
-
- # 这直观上应该是反着来循环,但是为方便 # for j in range(end-1,begin-1,-1):
- for j in range(begin,end):
- a[x][j] = 0
- y = begin
-
- # 规律是隔一行打印(begin+2 和 end-2),从第四次开始(贪吃蛇要撞到自己了)
- # begin 和 end 的改变,等于循环一圈后矩阵减去了行2列
- begin += 2
- for i in range(begin,end):
- a[i][y] = 0
- x = begin
- end -= 2
- for k in a:
- print(k)
- spiralize(12)
复制代码
结果是这样的
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
- [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
- [0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0]
- [0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0]
- [0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0]
- [0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0]
- [0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0]
- [0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0]
- [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0]
- [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0]
- [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
复制代码 |