顺时针打印矩阵

来源:互联网 发布:刚开网店卖软件好不好 编辑:程序博客网 时间:2024/05/14 08:13

题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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.
解法一:
写的实在是太丑了,,其实就是取了左上,跟右下的坐标,每次循环更改他们的坐标,flag为1的时候更改j,为0更改i,temp[0]为1时j增大,为0j减小,temp[1]同理,直到i1>i2或j1>j2,越界函数结束。 但是这样写出来代码易读性比较差,其实可以每次循环都内部可以直接按顺序更改四次,而不用设立标志位,即先j++,i–,j–,i++,这样写出来代码会比较简短。

class Solution:    def printMatrix(self, matrix):        # write code here        result = []        i1,i2 = 0, len(matrix)-1        j1,j2 = 0, len(matrix[0])-1        flag = 1        temp = [1,1]        i,j =0,0        while i1>i2 or j1>j2:            if flag:                if temp[1]:                    while j <= j2:                        result.append(matrix[i][j])                        j+=1                    else:                        j-=1                        i1+=1                        i+=1                        temp[1] = 0                else:                    while j>=j1:                        result.append(matrix[i][j])                        j-=1                    else:                        j+=1                        i-=1                        i2-=1                        temp[1] = 1                flag =0            else:                if temp[0]:                    while i <= i2:                        result.append(matrix[i][j])                        i += 1                    else:                        i-=1                        j-=1                        j2-=1                        temp[0] = 0                else:                    while i>=i1:                        result.append(matrix[i][j])                        i -=1                    else:                        i +=1                        j1+=1                        j+=1                        temp[0] = 1                flag =1        return result

解法二:
参考别人的方法,每次取pop出矩阵第0行,然后顺时针旋转剩下的数组,然后继续pop第0行,直到矩阵为空。

class Solution:    def printMatrix(self, matrix):        result = []        while matrix:            result += matrix.pop(0)            if matrix:                matrix = self.turn(matrix)        return result    def turn(self,matrix):        row = len(matrix)        col = len(matrix[0]) -1        new_matrix = []        for i in range(col,-1,-1):            new_row = []            for j in range(row):                new_row.append(matrix[j][i])            new_matrix.append(new_row)        return new_matrix
原创粉丝点击