6. Z 字形变换

1.题目

https://leetcode.cn/problems/zigzag-conversion/description/

2.题解

2.1解析

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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值