Python :顺时针打印矩阵


牛客网上的剑指 offer的在线编程:

题目描述:

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.

方法一:每次取二维列表的第一项,然后删除第一项,逆时针旋转二维列表,重复上述操作

# -*- coding:utf-8 -*-
'''
顺时针打印矩阵
题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
'''
class Solution:
    # matrix类型为二维列表,需要返回列表
    def printMatrix(self, matrix):
        if len(matrix) == 0:
            return []
        res = []
        number = len(matrix) * len(matrix[0])
        res.extend(matrix[0])
        while len(res) < number:
            matrix.pop(0)
            matrix = self.turn(matrix)
            res.extend(matrix[0])
        return res
    def turn(self, mat):
        if len(mat) == 0:
            return
        turned_lst = [([0] * len(mat)) for i in range(len(mat[0]))]
        for i in range(len(mat)):
            for j in range(len(mat[0])):
                turned_lst[j][i] = mat[i][len(mat[0]) - 1 - j]
        return turned_lst


方法二:

# -*- coding:utf-8 -*-
import numpy as np
class Solution:
    # matrix类型为二维列表,需要返回列表
    def printMatrix(self, matrix):
        # write code here
        all = []
        x, y = matrix.shape
        print x, y
        print matrix
        for k in range(x + y):
            all.append(matrix[0])
            b = matrix[1:, ]
            m, n = b.shape
            print m, n
            c = np.arange(m * n).reshape((n, m))
            for i in range(m):
                for j in range(n):
                    c[j][i] = b[i][n - 1 - j]
            matrix = c
            print matrix
            print len(matrix)
            if len(matrix) == 1:
                all.append(matrix[0])
                break
        return all


你可能感兴趣的:(python)