Python :顺时针打印矩阵

来源:互联网 发布:部落实验室升级数据 编辑:程序博客网 时间:2024/05/18 16:18


牛客网上的剑指 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 npclass 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


原创粉丝点击