您好,登錄后才能下訂單哦!
題目描述
輸入一個矩陣,按照從外向里以順時針的順序依次打印出每一個數(shù)字,例如,如果輸入如下4 X 4矩陣: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 則依次打印出數(shù)字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.
這種按照某個方向打印的,我們可以一圈一圈從外到內(nèi)打印整個矩陣。在這個題目中,我們可以每次選擇一個起點(左上角),然后順時針打印一圈。
class Solution:
# matrix類型為二維列表,需要返回列表
def printMatrix(self, matrix):
def helper(start_row, start_col):
# 打印一圈的時候,向右這個方向是一定要打印的。
# 其余三個方向需要滿足一定個條件后才會打印
end_row = rows - start_row - 1
end_col = cols - start_col - 1
for i in range(start_col, end_col + 1):
ans.append(matrix[start_row][i])
if end_row > start_row: # 只有當行數(shù)大于2的時候才向下
for i in range(start_row + 1, end_row + 1):
ans.append(matrix[i][end_col])
# 只有當列數(shù)大于2【且行數(shù)大于2】才向左。如果行數(shù)為1,那么就會重復打印同一行
if end_col > start_col and end_row > start_row:
for i in range(end_col - 1, start_col - 1, -1):
ans.append(matrix[end_row][i])
# 只有當行數(shù)大于_3_【且列數(shù)大于2】才向上。
# 如果行數(shù)為2,那么在向左之后就已經(jīng)全部打印完了
if end_row > start_row + 1 and end_col > start_col:
for i in range(end_row - 1, start_row, -1):
ans.append(matrix[i][start_col])
if not isinstance(matrix, list) or not isinstance(matrix[0], list):
return
rows, cols = len(matrix), len(matrix[0])
ans = []
start = 0
# 判斷是否需要打印這一圈。通過觀察歸納得知,當rows 和 cols都大于起點坐標的時候需要打印
while start * 2 < min(rows, cols):
helper(start, start)
start += 1
return ans
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。