您的位置:首页 > 其它

[leetcode] 6. ZigZag Conversion

2016-01-14 16:26 344 查看
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"
.

这道题是之字形转换字符串,题目难度为easy。

看了示例会发现,两个完整的列(如示例中的“PAY”、“ALI”)之间会有numRows-2个字符,这样整个字符串就划分成了很多个numRows+numRows-2个字符串(尾部不一定满足),这样第一行和最后一行就可以以此为间隔依次取原字符串中字符生成,中间的行需要加上之字形中间的字符,这里其实就是下标计算的问题,注意不要越界,具体请查看代码。具体代码:
class Solution {
public:
string convert(string s, int numRows) {
if(numRows <= 0) return "";
if(numRows == 1) return s;
string rst = "";
int sz = s.size();
for(int i=0; i<numRows; ++i) {
int idx = i;
while(idx < sz) {
rst += s[idx];
if(i!=0 && i!=numRows-1) {
idx += (numRows-1-i)*2;
if(idx >= sz) break;
else rst += s[idx];
idx += i*2;
}
else idx += (2*numRows-2);
}
}
return rst;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode