思路一
每一个Z所需的字符数是2 * (n - 1)
减一是因为第一行和最后一行在Z中只占一个
所以就引出了最直观的思路,找出两种规律就好
def convert(self, s: str, numRows: int) -> str:
if numRows == 1:
return s
len_sen = len(s)
temp = ['' for _ in range(numRows)]
new_sen = ''
for i in range(numRows):
# 第一行和最后一行,每个字符相差2(n-1)
if i == 0 or i == (numRows-1):
if i == 0:
for j in range(i,len_sen,(2*numRows - 2)):
temp[i] += s[j]
if i == (numRows - 1):
for j in range(i,len_sen,(2*numRows - 2)):
temp[i] += s[j]
#其他的行,每一行有两张规律,但其和也是2(n-1)
else:
for j in range(i,len_sen,(2*numRows - 2)):
temp[i] += s[j]
j += (2*(numRows-i-1))
if j < len_sen:
temp[i] += s[j]
print(temp)
for i in range(numRows):
for i in temp[i]:
new_sen += i
return new_sen
思路二
可以知道每一个Z占据2(n-1)而且顺序是下上下上。。。
所以可以根据这一个来进行操作
def convert(self, s: str, numRows: int) -> str:
if numRows == 1:
return s
len_sen = len(s)
temp = ['' for _ in range(numRows)]
new_sen = ''
#随着i变化的行数
row = 0
# flag控制row加还是减
for i in range(len_sen):
temp[row] += s[i]
if row == 0:
flag = 1
if row == numRows - 1:
flag = -1
row += flag
for i in range(numRows):
for i in temp[i]:
new_sen += i
return new_sen