您的位置:首页 > 其它

顺时针打印矩阵

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++,这样写出来代码会比较简短。

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: