【劍指Offer】15順時針列印矩陣
阿新 • • 發佈:2018-11-11
題目描述
輸入一個矩陣,按照從外向裡以順時針的順序依次打印出每一個數字,例如,如果輸入如下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.
時間限制:1秒;空間限制:32768K;本題知識點:陣列
解題思路
思路一
常規思路,將一次迴圈分為4步:從左到右、從上到下、從右到左、從下到上,注意避免重複,每次迴圈後判斷剩餘矩陣是否還能繼續這樣分4步列印,否則直接停止(行列數相同的情況)或列印一行後停止(列數大於行數的情況)或列印一列後停止(行數大於列數的情況)。
Python程式碼:
# -*- coding:utf-8 -*- class Solution: # matrix型別為二維列表,需要返回列表 def printMatrix(self, matrix): # write code here l = [] row = len(matrix) column = len(matrix[0]) xy = 0#起點座標 while True: # 結束條件 if xy == row//2: # 需要從上到下再列印一列 if row%2 == 1: for i in range(xy,column-xy): l.append(matrix[xy][i]) break if xy == column//2: # 需要從左到右再列印一行 if column%2 == 1: for i in range(xy,row-xy): l.append(matrix[i][xy]) break #1 從左到右列印一整行 for i in range(xy,column-xy): l.append(matrix[xy][i]) #2 從上到下列印一列,上下各少1個防止重複 for i in range(xy+1,row-xy-1): l.append(matrix[i][column-xy-1]) #3 從右到左列印一整行 for i in range(column-xy,xy,-1): #注意反向的寫法,步長-1,用的時候i再-1 l.append(matrix[row-1-xy][i-1]) #4 從下到上列印一列,上下各少1個防止重複 for i in range(row-xy-1,xy+1,-1): l.append(matrix[i-1][xy]) # 迴圈 xy += 1 return l
思路二
利用矩陣旋轉的思路,每次取出第一行,然後將矩陣逆時針旋轉。
# -*- coding:utf-8 -*- class Solution: # matrix型別為二維列表,需要返回列表 def printMatrix(self, matrix): result = [] while len(matrix) > 0: result += matrix[0] matrix = list(zip(*matrix[1:])) #矩陣轉置 matrix = matrix[::-1] #倒序 return result