6. ZigZag Conversion
Total Accepted: 82952
Total Submissions: 349151
Difficulty: Easy
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".
Subscribe to see which companies asked this question
Have you met this question in a real interview?
C++实现:
class Solution {
public:
string convert(string s, int numRows) {
int i,j;
int len=s.length();
if(len==0||numRows<2)
{
return s;
}
int dis=2*numRows-2;
string str="";
for(i=0;i<numRows;i++)
{
for(j=i;j<len;j+=dis)
{
str+=s[j];
if(i>0&&i<numRows-1)
{
int t=j+dis-2*i;
if(t<len)
{
str+=s[t];
}
}
}
}
return str;
}
};
python实现:
class Solution(object):
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
lag=2*numRows-2
length=len(s)
if length==0:
return s
if numRows<2:
return s
str=""
i=0
while i<numRows:
j=i
while j<length:
str+=s[j]
if i>0 and i<numRows-1:
t=j+lag-2*i
if t<length:
str+=s[t]
j+=lag
i+=1
return str
题目意思:简单解释一下,就是把字符串原顺序012345……按下图所示排列:
从中可以发现所有行的重复周期都是 2 * nRows - 2
对于首行和末行之间的行,还会额外重复一次,重复的这一次距离本周期起始字符的距离是 2 * nRows - 2 - 2 * iC++实现:
class Solution {
public:
string convert(string s, int numRows) {
int i,j;
int len=s.length();
if(len==0||numRows<2)
{
return s;
}
int dis=2*numRows-2;
string str="";
for(i=0;i<numRows;i++)
{
for(j=i;j<len;j+=dis)
{
str+=s[j];
if(i>0&&i<numRows-1)
{
int t=j+dis-2*i;
if(t<len)
{
str+=s[t];
}
}
}
}
return str;
}
};
python实现:
class Solution(object):
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
lag=2*numRows-2
length=len(s)
if length==0:
return s
if numRows<2:
return s
str=""
i=0
while i<numRows:
j=i
while j<length:
str+=s[j]
if i>0 and i<numRows-1:
t=j+lag-2*i
if t<length:
str+=s[t]
j+=lag
i+=1
return str
本文详细介绍了zigzag模式字符串转换算法的实现方法,包括C++和Python版本的代码示例,通过解析输入字符串并按照指定行数进行zigzag排列,最终输出按行读取的字符串。
2455

被折叠的 条评论
为什么被折叠?



