原题链接: https://leetcode.com/problems/zigzag-conversion/
一:原题内容
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"
.
二:AC代码
class Solution
{
public:
string convert(string s, int numRows)
{
int len=s.size();
if(numRows==1||len<=numRows)
{
return s;
}
char ch[10000];
int c=0;
//1
for(int i=0;i<len;)
{
ch[c++]=s[i];
i+=(2*numRows-2);
}
//2
for(int i=1;i<numRows-1;i++)
{
int j1=i;
int j2=i+2*(numRows-i-1);
while(j1<len||j2<len)
{
if(j1<len)
{
ch[c++]=s[j1];
j1+=(2*numRows-2);
}
if(j2<len)
{
ch[c++]=s[j2];
j2+=(2*numRows-2);
}
}
}
//3
for(int i=numRows-1;i<len;)
{
ch[c++]=s[i];
i+=(2*numRows-2);
}
return string(ch,ch+c);
}
};
class Solution(object):
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
s_len=len(s)
if numRows==1 or s_len<=numRows:
return s
ss=''
#1
for i in range(0,s_len,2*numRows-2):
ss+=s[i]
#2
for i in range(1,numRows-1):
j1=i
j2=i+2*(numRows-i-1)
while j1<s_len or j2<s_len:
if j1<s_len:
ss+=s[j1]
j1+=2*numRows-2
if j2<s_len:
ss+=s[j2]
j2+=2*numRows-2
#3
for i in range(numRows-1,s_len,2*numRows-2):
ss+=s[i]
return ss