LeetCode:ZigZag Conversion

这一题没有什么难度,主要就是找规律,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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值