题目
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 R
And 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"
.
“zigzag”实际上是按"N"字镜像形状排布的,
可以获取横向数之间差的规律,然后直接合成结果
代码
class Solution {
public:
string convert(string s, int nRows) {
if(nRows==1)
return s;
string ans;
int len=s.size();
int i,j,k; //处理到的行数,处理到的s中的序号,奇偶标志
int d[2]; //横向两个数的差
for(i=0;i<nRows;i++)
{
if(i==0||i==nRows-1)
{
d[0]=2*(nRows-1);
d[1]=2*(nRows-1);
}
else
{
d[0]=2*(nRows-1-i);
d[1]=2*i;
}
j=i;
k=0;
while(j<len)
{
ans+=s[j];
j+=d[k];
k=(k+1)&0x1;
}
}
return ans;
}
};