螺旋数组嘿嘿

在这里插入图片描述
网上解法确实不少:找规律、奇偶项、巴拉巴拉、也有跟我思路差不多但是我看不懂的一种
最后还是看了一个写c的老哥的视频才看懂了 缩一行(一列),究竟是什么意思

还有自己堆range(x,y,z) #z为负 x-z,直到y
理解的不够明白,之后要多谢几遍

4x4:
正序的
range(0,3) 只能取到0,1,2 。想取到3,就要range(3+1)
逆序的
想取到3到0的话,range(3,0,-1)是不可以的,要写成range(3,0-1,-1)

"""
逆时针
"""
m, n = map(int, input().split()) #m行,n列
nums = []
for i in range(m):
    nums.append(input().split())
a=[]
left,right=0,n-1
up,down=0,m-1
while(True):
    for i in range(up,down+1):a.append(nums[i][left])
    left+=1
    # x+=1 在for的外围
    if left>right:break
    for i in range(left,right+1):a.append(nums[down][i])
    down-=1
    if down<up:break
    for i in range(down,up-1,-1):a.append(nums[i][right])
    right-=1
    if right<left:break
    for i in range(right,left-1,-1):a.append(nums[up][i])
    up+=1
for x in a:
    print(x,'',end='')

闲来无事,勾栏听曲
来个顺时针

"""
顺时针
"""
m, n = map(int, input().split()) #m行,n列
nums = []
for i in range(m):
    nums.append(input().split())
a=[]
left,right=0,n-1
up,down=0,m-1
while(True):
    #假设输入3 3 也就是right=2 range(0,2) 00 01 02
    #虽然知道left=0,但还是要写上,因为缩小圈中left会变范围
    for i in range(left,right+1):a.append(nums[up][i])#为什么right+1?
    up+=1
    if up>down:break
    #此时up=1 right=2  range(1,2) 取不到2,所以+1
    for i in range(up,down+1):a.append(nums[i][right])
    right-=1
    if right<left:break
    for i in range(right,left-1,-1):a.append(nums[down][i])
    down-=1
    if down<up:break
    #到达不了up-1,只到up  与上面不同,此时的down是起,
    for i in range(down,up-1,-1):a.append(nums[i][left])
    left+=1
    if left>right:break
for x in a:
    print(x,'',end='')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值