LeetCode-6-ZigZag-Conversion 找规律水题

来源:互联网 发布:淘宝正版手办店 编辑:程序博客网 时间:2024/06/06 03:13

ZigZag就是折线式打印,走N形,一开始都没读懂题意。

找规律,发现2*numRows-2的周期,然后输出的时候注意一下第一行和最后一行,还要注意一下只有一行的情况,因为这个我还WA了一发,开头加个特判。

我觉得我代码已经不能再简单了,都是On的算法,但是只打败了6%的选手,不知道哪里比较耗时。

C++和java用腻了,不写了,Python大法好:

class Solution(object):    def convert(self, s, numRows):        """        :type s: str        :type numRows: int        :rtype: str        """        if numRows==1:            return s        totalNums=s.__len__()        ans=""        dx=2*numRows-2;        for i in range(numRows):            for j in range(totalNums):                if i==0:                    if j*dx>=totalNums:                        break;                    ans+=s[j*dx]                elif i==numRows-1:                    if j*dx+numRows-1>=totalNums:                        break;                    ans+=s[j*dx+numRows-1]                else:                    if j*dx+i>=totalNums:                        break;                    ans+=s[j*dx+i]                    if (j+1)*dx-i>=totalNums:                        break;                    ans+=s[(j+1)*dx-i]        return ans