1、题目:Z字变换(其实是N字变换吧),按照给定行数,把指定字符串从上到下、从左到右进行排列。
例子:"PAYPALISHIRING" 行数为3
结果:
P A H N
A P L S I I G
Y I R
2、解题思路:
my:一开始想着定义n个数组,n等于输出的行数,就是按行去存储字符。问题在于怎么求得每行的字符,试图找出每行字符的下标之间的联系,无果哈哈哈哈。在这里审题的时候还犯了一个错误,我以为所有输出的时候要像上面一样,中间要有空格隔开,其实并没有,只是字符串顺序的改变。
别的程序员1号:找出每行字符下标的关系,以4行为例
0 6 12 18
1 5 7 11 13 17
2 4 8 10 14 16
3 9 15
对k=i%(2n-2)进行判断:
k<=n-1,s[i]属于第k行
k>n-1,s[i]属于第2n-2-k行
最后把每一行拼接起来!
别的程序员2号:按照这个N字型路线来存字符,也是一开始就定义n个数组,在循环里面对每一行加入字符串,详细代码:flag就是用来判断什么时候要转变遍历方向的,妙啊!
class Solution(object):
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
if numRows==1:
return s
rev=["" for _ in range(numRows)]
i,flag=0,-1
for x in s:
rev[i]+=x
if i==0 or i==numRows-1:
flag=-flag
i+=flag
return "".join(rev)