LeetCode No.6 Z 字形变换

LeetCode No.6 Z 字形变换


在这里插入图片描述

简述思路:额,题意理解了。不过。对于这个Z字型,有点茫然。怎么做出来呢。想法是,可能Z字只是噱头。关键在于。行数与中间字母的关系。3行。有一个单排字母。4行有两排。以此类推。
大体思路是对的。细节实现,还需要提升。问题在于,算法具体化实现,逻辑问题。解题时间还需要加强。总觉得太难了。就不想思考。用了太长时间了。需要定时定量。完成任务。

解题思路:不需要暴力遍历所有代码。首先找规律,首行,和末尾一行。排除特殊情况。(空行,单字符串,单行)然后就是分情况讨论。关键问题所在,就是限制。垂直行。这个应该算是数学方式。斜边上的数,用node_length - i 来推论。j = i + node_length。

class Solution:
    def convert(self, s: 'str', numRows: 'int') -> 'str':
        str_length = len(s)
        node_length = 2*numRows - 2
        result = ""
        if str_length == 0 or numRows == 0 or numRows == 1:
            return s
        for i in range(numRows):
            for j in range(i,str_length, node_length):
#包括的是首行,尾行,垂直行。
                result += s[j]
#排除垂直行,注意范围限定!
                if i != 0 and i != numRows - 1 and j - 2*i + node_length < str_length:
                    result += s[j-2*i+node_length]
        return result
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值