By
sys.linux.d
Updated:
Contents
刚刚拿到这道题目的时候,确实有点看不懂。参考了一下别人的思路,还是将就的做出来了。这一道题目主要是找一下规律。
一排的时候
1 2 3 4 5 6 7 8 9 。。。。
二排得时候
1 3 5 7 9 。。。
2 4 6 8 。。。
三排得时候
1 5 9 。。。
2 4 6 8 。。。
3 7 。。。
四排的时候
1 7 13 。。。
2 6 8 12 14 。。。
3 5 9 11 15 。。。
4 10 。。。
总结上述较为简单地过程,我们就可以发现规律。当我们遇到较为难缠的问题的时候,首先考虑较为简单地情况,然后看看能否发现规律。这里总结一下规律(假设nRows排):
1 第i排从i开始
2 第i排的数的间隔为 2(nRows-i)、2(i-1)交替出现。
下面为代码,测试成功。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| def convert(s,nRows): if len(s) == 1 or len(s) == 0 or nRows == 1: return s res = "" minNum = min(nRows , len(s)) + 1 for i in range(1,minNum): flag = 0 p1 = 2*(nRows - i) p2 = 2*(i-1) p = i - 1 res = res + s[p] while p < len(s): if flag == 0: if p1 != 0: p = p + p1 if p >= len(s): break res = res + s[p] flag = 1 else: if p2 != 0: p = p + p2 if p >= len(s): break res = res + s[p] flag = 0 return res
|
坚持就是胜利