leetcode——6.Z字形变换

class Solution(object):
    def convert(self, s, numRows):
        """
        :type s: str
        :type numRows: int
        :rtype: str
        """
        if numRows==1:
            return s
        if len(s)<2:
            return s
        s1=s[::numRows*2-2]
        d=[i for i in range(len(s))][::numRows*2-2]
        s2=s[numRows-1:][::numRows*2-2]
        d_1=[i+numRows-1 for i in d]
        if len(s1)==len(s2):
            d=d_1
            t=numRows-2
            while t>0:
                d1_1=[i+t for i in d if i+t<len(s)]
                d1_2=[i-t for i in d if i-t>0]
                d1=d1_1+d1_2
                d1.sort()
                s3=''
                for i in range(len(d1)):
                    s3=s3+s[d1[i]]
                s1=s1+s3
                t-=1
        elif len(s1)>len(s2):
            t=1
            while t<=numRows-2:
                d1_1=[i+t for i in d if i+t<len(s)]
                d1_2=[i-t for i in d if i-t>0]
                d1=d1_1+d1_2
                d1.sort()
                s3=''
                for i in range(len(d1)):
                    s3=s3+s[d1[i]]
                s1=s1+s3
                t+=1
        return s1+s2
执行用时 :80 ms, 在所有 Python 提交中击败了36.02%的用户 内存消耗 :11.7 MB, 在所有 Python 提交中击败了45.14%的用户   好笨哦,两个小时才编出来这么一个。。。
执行用时为 24 ms 的范例
class Solution(object):
    def convert(self, s, numRows):
        """
        :type s: str
        :type numRows: int
        :rtype: str
        """
        if numRows<2 :
            return s
        result = ['' for i in range(numRows)]
        j = 0
        for i in range(len(s)):
            result[j] += s[i]
            if j == numRows-1:
                bool = -1
            if j == 0:
                bool = 1
            j += bool
        return ''.join(result)

人家这个办法好妙啊!!!!!!!!!

                                                                 ——2019.10.11

上一篇:Leetcode典型题解答和分析、归纳和汇总——T118(杨辉三角)


下一篇:杨辉三角