终于开始刷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 RAnd 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的大牛们,多谢你们为大家提供一个思考和编码的平台。