python 實現矩陣按對角線列印
阿新 • • 發佈:2020-01-09
如下所示:
Description: 將一個矩陣(二維陣列)按對角線向右進行列印。(搜了一下發現好像是美團某次面試要求半小時手撕的題) Example: Input: [ [1,2,3,4],[5,1,3],[9,5,2] ] Output: [[4],[3,[2,2],[1,1],5],[9]]
思路: 考慮每條對角線開頭元素的index(i,j)。i從0開始遍歷,j從col-1開始遍歷,首先考慮j的變化,若j變為0,則保持不變,讓i變化。在確定開頭元素後,可通過設定i+1,j+1及不超過範圍來向lst中對角線上新增元素。
對於以上例子,各對角線開頭元素的index分別為:
(0,3) (0,2) (0,1) (0,0) (1,0) (2,0)
其中各lst中的元素index分別為:
[(0,3)] [(0,2),(1,1),(2,0),2)] [(1,1)] [(2,0)]
程式碼:
def diagonal_right(matrix): if not matrix: return [] row = len(matrix) col = len(matrix[0]) col2 = col result = [] for i in range(row): for j in range(col2 - 1,-1,-1): #j倒序遍歷 lst = [] i1,j1 = i,j #i1,j1用於方便同一對角線元素的新增,否則改變i,j影響開頭元素的選擇 while i1 <= row - 1 and j1 <= col - 1: lst.append(matrix[i1][j1]) j1 += 1 i1 += 1 result.append(lst) if i == 0 and j == 0:#當遍歷完(0,0)開頭的一條對角線後,讓j固定為0 col2 = 1 return('the result is: %s'%result,'end') #test print(diagonal_right([[1],[2]])) print(diagonal_right([[1]])) print(diagonal_right([ [1,2] ]))
輸出:
變型: 由(0,0)開始向左列印:
思路: 同樣考慮每條對角線開頭元素的index(i,j)。i從0開始遍歷,j也從0開始遍歷,首先考慮j的變化,若j變為col-1,則保持不變,讓i變化。在找到開頭元素後,可通過設定i+1,j-1及不超過範圍來向lst中對角線上新增元素。
對於以上例子,各對角線開頭元素的index分別為:
(0,0) (0,3) (1,3) (2,3)
其中各lst中的元素index分別為:
[(0,0)] [(0,3),1)] [(1,2)] [(2,3)]
程式碼:
def diagonal_left(matrix): if not matrix: return [] row = len(matrix) col = len(matrix[0]) k=0 result = [] for i in range(row): for j in range(k,col): # j順序遍歷 lst = [] i1,j # i1,j影響開頭元素的選擇 while i1 <= row - 1 and j1 >=0: lst.append(matrix[i1][j1]) j1 -= 1 i1 += 1 if i==0 and j==col-1: k=col-1 result.append(lst) return ('the result is: %s' % result,'end') # test print(diagonal_left([[1],[2]])) print(diagonal_left([[1]])) print(diagonal_left([ [1,2] ]))
輸出:
此問題還可以有多種變型,若從左下角,右下角按對角線列印等,只需要進行簡單的修改即可實現。
以上這篇python 實現矩陣按對角線列印就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。