首页 > 试题广场 >

顺时针打印数字矩阵

[编程题]顺时针打印数字矩阵
  • 热度指数:4497 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
给定一个数字矩阵,请设计一个算法从左上角开始顺时针打印矩阵元素

输入描述:
输入第一行是两个数字,分别代表行数M和列数N;接下来是M行,每行N个数字,表示这个矩阵的所有元素;当读到M=-1,N=-1时,输入终止。


输出描述:
请按逗号分割顺时针打印矩阵元素(注意最后一个元素末尾不要有逗号!例如输出“1,2,3”,而不是“1,2,
3,”),每个矩阵输出完成后记得换行
示例1

输入

3 3
1 2 3
4 5 6
7 8 9
-1 -1

输出

1,2,3,6,9,8,7,4,5

备注:
M,N为正整数且 M*N<=300000
旋转矩阵
def traverse(matrix):
    m=len(matrix)
    n=len(matrix[0])
    new_matrix=[]
    for i in range(n):
        new_matrix1=[]
        for j in range(m):
            new_matrix1.append(matrix[j][i])
        new_matrix.append(new_matrix1)
    new_matrix.reverse()
    return new_matrix
返回输出
def printmatrix(matrix):
    array=[]
    while matrix:
        for item in matrix[0]:
            array.append(item)
        del matrix[0]
        if len(matrix)==0:
            break
        matrix=traverse(matrix)
    return array
while True:
    m,n=[int(x) for x in input().split()]
    if m==-1&nbs***bsp;n==-1:
        break
    matrix = [[int(x) for x in input().split()] for j in range(m)]
    result=printmatrix(matrix)
    print(','.join(map(str,result)))
您的代码已保存
运行超时:您的程序未能在规定时间内运行结束,请检查是否循环有错或算法复杂度过大。点击对比用例标准输出与你的输出
case通过率为86.67%
就酱~这个是我自己能理解的写法,比起大佬是真的复杂,主要用了之前看到的顺时针打印矩阵的解法

发表于 2020-03-20 16:18:43 回复(0)

Python Solution

def clock_print(matrix):
    c = []
    while True:
        try:
            c.extend(matrix.pop(0))
            for i in range(len(matrix)-1):
                c.append(matrix[i].pop())
            c.extend(matrix.pop(-1)[::-1])
            for i in range(-len(matrix)+1,0):
                c.append(matrix[-i].pop(0))
        except IndexError:
            break
    return c

while True:
    M,N = [int(i) for i in input().split()]
    if M==-1 and N==-1:
        break
    matrix = [[str(i) for i in input().split()] for m in range(M)]
    result = clock_print(matrix)
    print(','.join(result))
编辑于 2019-08-29 11:39:10 回复(0)