6 . ZigZag Conversion
原题地址:LeetCode ZigZag
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)
And then read line by line: [“PAHNAPLSIIGYIR”][6]
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)][6] should return [“PAHNAPLSIIGYIR”][6].
解题思路:
代码(Python):
class Solution(object):
def convert(self, s, numRows):
# 若只有一行,则直接返回原字符即可
if numRows == 1: return s
# lens为字符串长度
lens = len(s)
# 生成一个含有numRows个空字符串的list
res = ['' for i in range(numRows)]
# index用于指向当前字符应存入哪个字符串
index = -1
# step用于改变index的值
step = 1
# 循环字符串中的所有字符
for i in range(lens):
index += step
# 如果当前index超过了list的大小时,将index - 2, 同时step职位-1
if index == numRows:
index -= 2
step = -1
# 如果当前index小于了list的大小时,将index置为1, 同时step置为1
if index == -1:
step = 1
index = 1
# 将字符与list中的index指向的字符串链接
res[index] += s[i]
# 通过join连接符,将list中的字符串连接并返回一个字符串
return ''.join(res)