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