classSolution(object): defconvert(self, s, numRows): """ :type s: str :type numRows: int :rtype: str """ if numRows == 1or numRows >= len(s): return s else: ans = [] i = 0 n = 2*numRows-2 # 第一行 while i < len(s): ans.append(s[i]) i += n # 中间各行 for i inrange(2,numRows): n = n - 2 while i-1 < len(s): ans.append(s[i-1]) i += n # 最后一行 n = 2*numRows-2 i = numRows-1 while i < len(s): ans.append(s[i]) i += n return''.join(ans)
但是看完评论区另一种解法我气的够呛,卧槽我怎么能这么傻,害,这么明显的规律我都没发现…
解法3:按列取值(我觉得更像顺藤摸瓜,嘻嘻嘻)
上一种方法是从s中按最终答案的顺序取值,那我们能不能换个思考方式,按照s的存储顺序取值呢。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
classSolution(object): defconvert(self, s, numRows): """ :type s: str :type numRows: int :rtype: str """ if numRows >= len(s) or numRows == 1: return s ans, count, d = ['']*numRows, 0, 1 for i in s: ans[count] += i count += d # 当到第一行和最后一行的时候d需要反转 if count==0or count==numRows-1: d = -d return''.join(ans)