题目描述
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".
分析:用一个vector存储每一行的string,用一个变量step确定行号的行走方向,到达第一行时向下,到达最后一行时向上,最后将得到的string按照行号依次连接。
class Solution {
public:
string convert(string s, int nRows) {
if(nRows <= 1)
return s;
vector<string> z(nRows,"");
int step = 1,row = 0;
int l = s.size();
for(int i=0;i<l;i++)
{
z[row] += s[i];
if(row == 0)
step = 1;
else if(row == nRows-1)
step = -1;
row += step;
}
string result = "";
for(int i=0;i<nRows;i++)
result += z[i];
return result;
}
};