转圈打印矩阵
【題目】 給定一個整型矩陣matrix,請按照轉圈的方式打印它。 例如:1 2 3 45 6 7 89 10 11 121314
15 16 打印結果為:1,2,3,4,8,12,16,15,14,13,9, 5,6,7,11, 10
【要求】 額外空間復雜度為O(1)
思路:找到矩陣的左上角坐標(tR,tC)和右下角坐標(dR,dC),之后寫一個遞歸函數,每一次打印最外層數據,代碼如下:
def spiralOrderPrint(Matrix):tR = 0tC = 0dR = len(Matrix)-1dC = len(Matrix[0])-1while tR <= dR and tC <= dC:printEdge(Matrix,tR,tC,dR,dC)tR +=1tC +=1dR -=1dC -=1def printEdge(Matrix,tR,tC,dR,dC):if tR == dR:for i in range(tC,dC):print(Matrix[tR][i])elif tC == dC:for i in range(tR,tC):print(Matrix[i][dR])else:cur_r = tRcur_c = tCwhile cur_c!=dC:print(Matrix[tR][cur_c])cur_c +=1while cur_r!=dR:print(Matrix[cur_r][dC])cur_r +=1while cur_c!=tC:print(Matrix[dR][cur_c])cur_c -=1while cur_r!=tR:print(Matrix[cur_r][tC])cur_r -=1s = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] spiralOrderPrint(s)?
總結