顺时针打印矩阵
2017-11-19 15:53
155 查看
题目描述:
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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++,这样写出来代码会比较简短。
解法二:
参考别人的方法,每次取pop出矩阵第0行,然后顺时针旋转剩下的数组,然后继续pop第0行,直到矩阵为空。
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 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