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"
.
文章要求进行‘Z’排列,如下
1 9 17
2 8 10 16 18
3 7 11 15 19 23
4 6 12 14 20 22
5 13 21
方法一:
建一个numRows个元素的string数组。根据行数和列数的变化来修改,变化的情况;
当列数col为numRows-1的整数倍时,依次将字符存到string[row]里面,row++,i++;
当row==numRows时,存下字符后,i++,row--,col++;
当列数col不是numRows-1的整数倍时,存下字符后,i++,row--,col++;
费时 24ms
string convert(string s, int numRows) {
if (numRows>=s.length() || numRows==1) return s;
string *temp =new string[numRows];
string res;
int col,j=0;
for(int i=0,row=0,col=0;i<s.length();)
{
if(col%(numRows-1)==0)
{
if(row==numRows-1)
{
temp[row].push_back(s[i]);
i++;row--;col++;
}
else
{
temp[row].push_back(s[i]);
i++;row++;
}
}
else
{
temp[row].push_back(s[i]);
i++;row--;col++;
}
}
for(int j=0;j<numRows;j++)
res += temp[j];
return res;
}