''' 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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. 对于原始二维数组,先将数组中的第0行中的元素打印出来,再删除数组中的第0行 对于剩下的数组逆时针旋转90度,再将第0行的元素打印出来,再删除 当删除后的数组变成一维时,将一维列表逆序 reverse()方法或者list[::-1] 在写代码的时候遇到一个bug,就是在python中初始化二维数组的时候 如果采用这种形式: a=[[0]*3]*2 a[0][1]=1 print(a)#[[0, 1, 0], [0, 1, 0]] 这是因为后面的*2表示将前面的以为列表引用2次,将前面的[0,0,0]列表浅拷贝3次 则修改其中任何一个浅拷贝的数值,相当于将最原始的一维列表发生改变,则所有数值都会改变 解决这个问题的办法是: a=[[0]*3 for i in range(2)] ''' # -*- coding:utf-8 -*- class Solution: # matrix类型为二维列表,需要返回列表 def turn(self,matrix): ''' :param matrix: 将输入的矩阵逆时针旋转90度 :return: ''' row=len(matrix) if row==1: return [matrix[0][::-1]] col=len(matrix[0]) output= [([0] * row) for i in range(col)] for i in range(col): for j in range(row): output[i][j]=matrix[j][col-1-i] return output def printMatrix(self, matrix): # write code here result=[] if isinstance(matrix[0],int): matrix=matrix[::-1] for i in matrix: result.append(i) return result col=len(matrix[0]) if col==1: for i in range(len(matrix)): result.append(matrix[i][0]) return result while(1): for i in range(len(matrix[0])): result.append(matrix[0][i]) print('1222',result) if len(matrix)==1: break del matrix[0] matrix=self.turn(matrix) return result if __name__=='__main__': matrix=[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] output=Solution().printMatrix(matrix) print(output)
顺时针打印矩阵
最新推荐文章于 2024-08-19 17:00:22 发布