matrix roation in codeeval 矩阵转置

题目来自 codeeval 中的 easy 级别 MATRIX ROTATION

要顺时针翻转一个 n * n 矩阵, 有肉眼观察到的变化就是列变行, 第一列 --> 第一行并且由于是顺时针翻转, 依次将每列转为行之后还需要翻转每行的元素顺序

这是肉身解法, 算法不适用于翻转 180/270 的情况, 写这个只是为了证明肉身解法也挺方便的

import sys
import math


def rotate_matrix(line):
    """
    依次遍历列, 然后翻转行元素次序
    """
    n = int(math.sqrt(len(line)))
    for i in range(n):
        for j in reversed(range(n)):
            yield line[j * n + i]

matrix_lines = """a b c d
a b c d e f g h i j k l m n o p
a b c d e f g h i"""
for line in matrix_lines.splitlines():
    print(' '.join(rotate_matrix(line.split())))

输出

c a d b
m i e a n j f b o k g c p l h d
g d a h e b i f c

Published: February 08 2015

blog comments powered by Disqus