+12 投票
分类:编码思路 | 用户: 9 4 3 (2.5k 分)

【问题描述】

给你一个 m 行 n 列的矩阵 matrix ,请从左上角的元素开始 按照顺时针螺旋顺序 ,返回矩阵中的所有元素。

【输入形式】

第一行:空格分割的两个正整数m,n(1<=m,n<=3)

接下来有m行,每行包含由空格分割的n个自然数(每行之后无空格,只在数与数之间有空格)

【输出形式】

空格分割的m*n个自然数(结尾有空格)

【样例输入】

3 3

1 2 3

4 5 6

7 8 9

【样例输出】

1 2 3 6 9 8 7 4 5 

#顺时针矩阵

nums = input().split()

m,n = int(nums[0]),int(nums[1])

matrix = []

for i in range(m):

    matrix.append([])

    nums = input()

    for j in range(n):

        matrix[i].append(nums[2*j])

def spiralOrder(matrix):

        left,top = 0,0

        bottom,right = len(matrix),len(matrix[0])

        result = []

        while True:

            for i in range(left, right):#从左到右

                result.append(matrix[top][i])

            top += 1

            if top >= bottom:

                break

            for i in range(top,bottom):#从上到下

                result.append(matrix[i][right-1])

            right -= 1

            if right <= left:

                break

            for i in range(left,right):#从右到左

                result.append(matrix[bottom-1][right-i+left-1])

            bottom -= 1

            if top >= bottom:

                break

            for i in range(top,bottom):#从下到上

                result.append(matrix[bottom-i+top-1][left])

            left += 1

            if right <= left:

                break

        return result

res = spiralOrder(matrix)

for i in res:

    print(i,end=' ')

2 个回答

+2 投票
用户: 10 8 4 (2.7k 分)

填补一下Fish同学留下的空白(笑^v^)

这道题正常来讲应该打表,很可惜我不正常<作叹气科>

  1. str1=input()
  2. list1=str1.split()
  3. m=int(list1[0])
  4. n=int(list1[1])
  5. list1=[]
  6. for i in range(m):
  7.     str1=input()
  8.     list1.append(str1.split())
  9. if m>n:
  10.     z=2*n
  11. else:
  12.     z=2*m-1
  13. for k in range(z):
  14.     if k%4==0:
  15.         x,y=(k//4),(k//4)
  16.         while(y<=(n-1-(k//4))):
  17.             print(int(list1[x][y]),end=' ')
  18.             y+=1
  19.     if k%4==1:
  20.         x,y=((k//4)+1),(n-1-(k//4))
  21.         while(x<=(m-1-(k//4))):
  22.             print(int(list1[x][y]),end=' ')
  23.             x+=1
  24.     if k%4==2:
  25.         x,y=(m-1-(k//4)),(n-2-(k//4))
  26.         while(y>=(k//4)):
  27.             print(int(list1[x][y]),end=' ')
  28.             y-=1
  29.     if k%4==3:
  30.         x,y=(m-2-(k//4)),(k//4)
  31.         while(x>=((k//4)+1)):
  32.             print(int(list1[x][y]),end=' ')
  33.             x-=1
+1 投票
用户: 5 1 (530 分)
numbers=input()
numbers=numbers.split(' ')
matrix=[[None]*int(numbers[1]) for i in range(int(numbers[0]))]
for i in range(int(numbers[0])):
    number1=input()
    number1=number1.split()
    for j in range(len(number1)):
        matrix[i][j]=int(number1[j])
u,v,t=0,0,0
m,n=int(numbers[0])-1,int(numbers[1])-1
while True:
    for i in range(u,n+1):
        print(matrix[v][i],end=' ')
        t+=1
    v+=1
    if t>=(int(numbers[1]))*(int(numbers[0])):
        break    
    for i in range(v,m+1):
        print(matrix[i][n],end=' ')
        t+=1
    n-=1
    if t>=(int(numbers[1]))*(int(numbers[0])):
        break
    for i in range(n,u-1,-1):
        print(matrix[m][i],end=' ')
        t+=1
    m-=1
    if t>=(int(numbers[1]))*(int(numbers[0])):
        break
    for i in range(m,v-1,-1):
        print(matrix[i][u],end=' ')
        t+=1
    u+=1
    if t>=(int(numbers[1]))*(int(numbers[0])):
        break
欢迎来到 在线问答系统 ,有什么不懂的可以尽管在这里提问,你将会收到社区其他成员的回答。
...