ZigZag Conversion

    终于开始刷LeetCode,一直打算做一些编程题来提高编码水平,由于各种原因拖到至今,深感惭愧。不过好在第一步终于是迈出了。以前除了必须要完成的编程任务之外很少做类似于ACM等编程题,所以在LeetCode上先从简单入手,题目如下:

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   N
A P L S I I G
Y   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" .

      初看这个题目,并不是特别难,用几个String数组便可解决。但因没有实战经验,并不知道题目中ZigZag这种“之”字形转换的明确定义。所以我便上网查了一下。自己想了想,以为这一定是一道找规律的题目,但是我找了一会并没有发现特别明显的规律,而此刻我能想到的最好的方法也就是用多个String数组来存储每一行的字符然后再合并返回。所以便忍不住看了网上博主的答案,至少对我来说他给的方法是很妙的,无论是用数组实现的还是找规律实现的方法。博主能找到那个规律我认为特别棒。

网址是:http://blog.csdn.net/ljiabin/article/details/40477429点击打开链接 

      当看到博主给的Java代码时,我首先看到了一个Programmer思考问题解决问题的完备性。说实话我在思考这个问题的时候只考虑了特殊的情况,并没有想到诸如:输入字符串为空 或 nRows为1(网上博主也没有考虑这种情况)的情况。想想以前编写代码时,一般程序写好出错都是出在了特殊情况考虑不周上(这里并不讨论各种bug的影响)。那么这样的编程训练首先会训练一个人思维的严密性,充分考虑各种情形。这样的思维训练要比提高你的编程水平要重要的多。

      这几天正在学习Python,所以仿照网上博主给的代码用Python实现了一下,以熟悉Python编程,其实大同小异。

class Solution:
    # @return a string
    def convert(self, s, nRows):
        if len(s) <= 1 or nRows == 1:
            return s
        ss = []
        for i in range(0, nRows):
            ss.append("")
            
        row = 0
        delta = 1
        for i in range(0, len(s)):
            ss[row] += s[i]
            row += delta
            if row >= nRows:
                row = nRows - 2
                delta = -1
            if row < 0:
                row = 1
                delta = 1
                
        result = ""
        for i in range(0, nRows):
            result += ss[i]
            
        return result

        仅以此来记录我的LeetCode旅程,希望我能坚持下来,另外特别感谢维护LeetCode的大牛们,多谢你们为大家提供一个思考和编码的平台。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值