我的思路:
class Solution:
def convert(self, s: str, numRows: int) -> str:
ans = ''
if numRows == 1:
return s
for i in range(1, numRows + 1): # i是从1到numRows+1
step = i - 1
ind = (numRows - 1) * 2 - (numRows - i) * 2
while step < len(s):
ans += s[step]
if not (i == 1 or i == numRows):
ind = (numRows - 1) * 2 - ind
else:
ind = (numRows - 1) * 2
step += ind
return ans
其他思路:
class Solution:
def convert(self, s: str, numRows: int) -> str:
# leetcode submit region end(Prohibit modification and deletion)
if numRows < 2:
return s
res = ["" for _ in range(numRows)] # 行数个数组,分别记录每一行的字母
i, flag = 0, -1 #
for c in s:
res[i] += c # 一开始是0
if i == 0 or i == numRows - 1:
flag = -flag # 第一个或者最后一个时,flag转向坐标向下变为向上
i += flag # 同上一步flag = -flag 这个是改变下标,那个是改变方向
return "".join(res)