python 矩陣按對角線列印

2021-08-28 06:04:29 字數 3277 閱讀 7873

description:將乙個矩陣(二維陣列)按對角線向右進行列印。(搜了一下發現好像是美團某次面試要求半小時手撕的題)

example:

input:

[[1,2,3,4],

[5,1,2,3],

[9,5,1,2]

]output:

[[4],

[3, 3],

[2, 2, 2],

[1, 1, 1],

[5, 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,3)]

[(0,1),(1,2),(2,3)]

[(0,0),(1,1),(2,2)]

[(1,0),(2,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 -

1and j1 <= col -1:

[j1]

) j1 +=

1 i1 +=

1if i ==

0and j ==0:

#當遍歷完(0,0)開頭的一條對角線後,讓j固定為0

col2 =

1return

('the result is: %s'

%result,

'end'

)#test

print

(diagonal_right([[

1],[

2]])

)print

(diagonal_right([[

1]])

)print

(diagonal_right([[

1,2,

3,4]

,[5,

1,2,

3],[

9,5,

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,1)

(0,2)

(0,3)

(1,3)

(2,3)

其中各lst中的元素index分別為:

[(0,0)]

[(0,1),(1,0)]

[(0,2),(1,1),(2,0)]

[(0,3),(1,2),(2,1)]

[(1,3),(2,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, j1 = i, j # i1,j1用於方便同一對角線元素的新增,否則改變i,j影響開頭元素的選擇

while i1 <= row -

1and j1 >=0:

[j1]

) j1 -=

1 i1 +=

1if i==

0and j==col-1:

k=col-

1return

('the result is: %s'

% result,

'end'

)# test

print

(diagonal_left([[

1],[

2]])

)print

(diagonal_left([[

1]])

)print

(diagonal_left([[

1,2,

3,4]

,[5,

1,2,

3],[

9,5,

1,2]]))

輸出:

此問題還可以有多種變型,若從左下角,右下角按對角線列印等,只需要進行簡單的修改即可實現。

矩陣對角線輸出

題1 二維陣列 n n 沿對角線方向,從右上角列印到左下角如n 4 4 4陣列 寫道 要求列印出 寫道 4 3 8 2 7 12 1 6 11 16 5 10 15 9 14 1303 02 13 01 12 23 00 11 22 33 10 21 32 20 31 30程式 public cla...

力扣 1329將矩陣按對角線排序

沒有什麼特別的難度,就是特別樸素的排序。主要是邊界控制 class solution sort buff.begin buff.end for int j 0 j buff.size j for int i 0 i c i sort buff.begin buff.end for int j 0 j...

螺旋矩陣,求對角線之和

線代知識 include intmain void scanf d n a x y 1 while n n c for x 0 x printf n 站在數學角度看 會有重複點,但 執行不會有重複點。因為對於 而言方陣中的元素只遍歷了一次,不會有重複點 include intsum int a 10...