6. ZigZag Conversion【E】【10】【leetcode】

来源:互联网 发布:湖南卫视网络在线直播 编辑:程序博客网 时间:2024/05/18 01:33

The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

P   A   H   NA P L S I I GY   I   R
And then read line by line: "PAHNAPLSIIGYIR"

Write the code that will take a string and make this conversion given a number of rows:

string convert(string text, int nRows);
convert("PAYPALISHIRING", 3) should return "PAHNAPLSIIGYIR".


Subscribe to see which companies asked this question


按照下面的过程来走一遍就行了。
zigzag长成这个样。


/*n=numRowsΔ=2n-2    1                           2n-1                         4n-3Δ=        2                     2n-2  2n                    4n-4   4n-2Δ=        3               2n-3        2n+1              4n-5       .Δ=        .           .               .               .            .Δ=        .       n+2                 .           3n               .Δ=        n-1 n+1                     3n-3    3n-1                 5n-5Δ=2n-2    n                           3n-2                         5n-4*/








class Solution(object):    def convert(self, s, numRows):        #print s        if numRows == 1:            return s        l = len(s)        r = numRows        res = ''        for i in xrange(r):            #print i            j = 0            if i == 0:                while j < l:                    try :                        res += s[j*(r-1)]                        j += 2                    except:                        #print res                        j = l            elif i < r-1:                while j < l:                    try:                        if j == 0:                            res += s[i]                        else:                            res += s[j*(r-1) - i]                            res += s[j*(r-1) + i]                        j += 2                    except:                        #print res                        j = l            else:                j = 1                while j <l:                    try:                        res += s[j*(r-1)]                        j+=2                    except:                        #print res                        j = l        return res



0 0
原创粉丝点击