【題目】
給定一個矩陣 matrix,按照“之”字形的方式列印這個矩陣,例如:
1 2 3 4
4 5 6 8
9 10 11 12
“之”字形列印的結果為:1, 2, 5, 9, 6, 3, 4, 7, 10, 11, 8, 12
要求額外空間複雜度為O(1)
【基本思路】
- 上坐标(tR1,tC1)初始化為(0,0),先沿着矩陣第一行移動(tC1++),當到達第一行最右邊的元素後,再沿着矩陣最後一列移動(tR1++).
- 下坐标(tR2,tC2)初始化為(0,0),先沿着矩陣第一列移動(tR2++),當到達第一列最下邊的元素後,再沿着矩陣最後一行移動(tC2++).
- 上坐标和下坐标同時移動,每次移動後,上坐标和下坐标的連線就是矩陣的一條斜線,列印斜線上的元素即可.
- 用一個boolean型變量flag控制列印的方向.
下面是使用python3.5實作的代碼。
def printMatrixZigZag(m):
def printLevel(m, tR1, tC1, tR2, tC2, flag):
if flag:
while tR2 != tR1 - :
print(m[tR2][tC2], end=' ')
tR2 -=
tC2 +=
else:
while tR1 != tR2 + :
print(m[tR1][tC1], end=' ')
tR1 +=
tC1 -=
tR1 = tC1 = tR2 = tC2 =
dR = len(m) -
dC = len(m[]) -
flag = True
while tR1 <= dR and tC2 <= dC:
printLevel(m, tR1, tC1, tR2, tC2, flag)
tR1 = tR1 if tC1 != dC else tR1 +
tC1 = tC1 + if tC1 != dC else tC1
tC2 = tC2 if tR2 != dR else tC2 +
tR2 = tR2 + if tR2 != dR else tR2
flag = not flag