1.题目
https://leetcode.cn/problems/zigzag-conversion/description/
2.题解
2.1解析
![](https://img-blog.csdnimg.cn/img_convert/bec387c6e2604ca2817109d68d618e25.png)
2.2实现
class Solution:
def convert(self, s, numRows):
lens=len(s)
lst=[]
if numRows==1:
return s
yushu=(lens+numRows-2)%(2*numRows-2)
lieshu=(lens+numRows-2)//(2*numRows-2)
if yushu>(numRows-2):#列数增加
yushu2=yushu%(numRows-1)
begin=lieshu*(2*numRows-2)
num1=2*numRows-2
for i in range(yushu2+1):
j=i
cishu=1
tempnum1=num1-i*2
tempnum2=i*2
while j<=begin+i:
if tempnum2==0:
lst.append(s[j])
j+=num1
else:
if cishu%2==1:
lst.append(s[j])
j += tempnum1
cishu+=1
else:
lst.append(s[j])
j += tempnum2
cishu += 1
begin=lens-1-yushu2*2-1
for i in range(yushu2+1,numRows):
j = i
cishu = 1
tempnum1 = num1 - i * 2
tempnum2 = i * 2
while j <= begin-(i-yushu2-1):
if tempnum2 == 0 or tempnum1 == 0:
lst.append(s[j])
j += num1
else:
if cishu % 2 == 1:
lst.append(s[j])
j += tempnum1
cishu += 1
else:
lst.append(s[j])
j += tempnum2
cishu += 1
return "".join(lst)
elif yushu==0:
begin = (lieshu-1) * (2 * numRows - 2)
num1 = 2 * numRows - 2
for i in range(numRows):
j = i
cishu = 1
tempnum1 = num1 - i * 2
tempnum2 = i * 2
while j <= begin + i:
if tempnum2 == 0 or tempnum1 == 0:
lst.append(s[j])
j += num1
else:
if cishu % 2 == 1:
lst.append(s[j])
j += tempnum1
cishu += 1
else:
lst.append(s[j])
j += tempnum2
cishu += 1
return "".join(lst)
else:
row=numRows-1-yushu
begin = (lieshu - 1) * (2 * numRows - 2)
num1 = 2 * numRows - 2
for i in range(row):
j = i
cishu = 1
tempnum1 = num1 - i * 2
tempnum2 = i * 2
while j <= begin + i:
if tempnum2 == 0 or tempnum1 == 0:
lst.append(s[j])
j += num1
else:
if cishu % 2 == 1:
lst.append(s[j])
j += tempnum1
cishu += 1
else:
lst.append(s[j])
j += tempnum2
cishu += 1
begin =lens
for i in range(row,numRows):
j = i
cishu = 1
tempnum1 = num1 - i * 2
tempnum2 = i * 2
while j <= begin-(i-row):
if tempnum2 == 0 or tempnum1 == 0:
lst.append(s[j])
j += num1
else:
if cishu % 2 == 1:
lst.append(s[j])
j += tempnum1
cishu += 1
else:
lst.append(s[j])
j += tempnum2
cishu += 1
return "".join(lst)