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
#!/usr/bin/python
#coding: utf-8
def convert(s,nRows):
if len(s) == 1 or len(s) == 0 or nRows == 1: #考虑到convert(“AB”,1) convert(“”,4)
return s
res = ""
minNum = min(nRows , len(s)) + 1 #考虑到 convert(“AB”,3)这种情况
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

坚持就是胜利

Contents