您的位置:首页 > 其它

ZigZag Conversion

2014-05-30 11:46 134 查看

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   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"
.

由题意可以看出是通过将原先的字符串按‘N’重新排列在组合。

思路就很简单了,通过一个vector<string>来记录每一行的数据,对初始字符串从上向下排列,到达底部在向上,以此类推。row=1就直接输出原字符串。

string convert(string s, int nRows) {
if(nRows == 1)
return s;

vector<string> vec(nRows, "");
bool check = true; //判断是升序还是降序
for(int i = 0, j = 0; i < s.size(); i++){
vec[j] += s[i]; //j是处理的行
if(check)
j++;
else
j--;
if(j == 0 || j == nRows - 1) //当j到达顶部或底部,需要更改执行顺序
check = !check;
}
string s2;
for(int i = 0; i < nRows; i++)
s2 += vec[i];
return s2;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ZigZag