【LeetCode】6.ZigZag Conversion Z字形變換
阿新 • • 發佈:2018-11-29
示例1:
Input: s = "PAYPALISHIRING", numRows = 3 Output: "PAHNAPLSIIGYIR" Explanation: P A H N A P L S I I G Y I R
示例2:
Input: s = "PAYPALISHIRING", numRows = 4 Output: "PINALSIGYAHRPI" Explanation: P I N A L S I G Y A H R P I
解題思路:
本題題意理解起來非常困難。
反覆閱讀之後,意思是要S形排列。
那不是很簡單麼= =
if numRows == 1: return s arr = [] for i in range(numRows): arr.append('') lenth = len(s) for i in range(lenth): loc = i % ((numRows - 1) * 2) if loc < numRows: arr[loc] = arr[loc] + s[i] else: arr[(numRows- 1) * 2 - loc] = arr[(numRows- 1) * 2 - loc] + s[i] # print(arr) res = '' for i in range(numRows): res = res + arr[i] return res
148 ms,打敗了29.81%的對手。
解題思路1:
優化了下程式碼:
if numRows == 1: return s arr = [''] * numRows lenth = len(s) period = (numRows - 1) * 2 for i in range(lenth): loc = i % period if loc < numRows: arr[loc] += s[i] else: arr[period - loc] += s[i] # print(arr) res = ''.join(arr) return res
76 ms,打敗了99.37%的對手。
嗯,像這樣簡單的題,微小的優化也是很重要的。
解題思路2:
讀了下排名最前的程式碼:
if numRows == 1 or numRows >= len(s):
return s
L = [''] * numRows
index, step = 0, 1
for x in s:
L[index] += x
if index == 0:
step = 1
elif index == numRows -1:
step = -1
index += step
return ''.join(L)
與我的主要差異在於,判斷迴文時,我使用了複雜的數學題,而靠前程式碼使用的是index的+1再-1。
值得學習。