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"
.
string convert(string s, int nRows) {
//此题主要是寻找规律
string str = s;
int addOne, addTwo, len = s.size(), index = 0;
for (int i = 0; i < nRows; ++i)
{
//i = 0, addTwo = 0; i = nRows - 1, addOne = 0;
addOne = (nRows - i - 1) * 2;
addTwo = i * 2;
int j = i;
while (j < len)
{
str[index++] = s[j];
//中间行
if (addOne && addTwo)
{
j += addOne;
if (j < len)
str[index++] = s[j];
j += addTwo;
}
//第一行和倒数第一行
else if (addOne || addTwo)
j += addOne == 0 ? addTwo : addOne;
else//当nRows = 1时
j += 1;
}
}
return str;
}