这一题没有什么难度,主要就是找规律,Zigzag的含义网上有例子讲的很明白。
我参考的思路来自这篇文章。
http://blog.csdn.net/cshaxu/article/details/12507201。
主要思路很简单:
所有行每一个元素index的下一个元素在字符串中的索引为:index + 2(numRows - 1),即重复周期为2(numRows - 1)。
除了第一行和最后一行之外,其余行都还多了一个元素,其下标为:index + 2(numRows - index - i)
下面是python的实现代码:
#! /usr/bin/env python
# -*- coding:gbk -*-
class Solution(object):
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
s_list = []
if numRows == 1 or len(s) == 0:
return s
for i in range(0, numRows):
for index in range(i, len(s), 2*(numRows - 1)):
s_list.append(s[index])
if i != 0 and i != numRows - 1:
if index + 2*(numRows - i - 1) < len(s):
s_list.append(s[index + 2*(numRows - i - 1)])
ret_str = ''.join(s_list)
return ret_str
if __name__ == "__main__":
s = Solution()
print s.convert("PAYPALISHIRING", 3)
#print s.convert("", 3)
#print s.convert("PAYPALISHIRING", 1)