# 6. ZigZag Conversion

146人阅读 评论(0)

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

class Solution {
public:
string convert(string s, int r) {
if(r == 1) return s;
string res;
int n = s.size();
for(int i = 0; i < r; i++){
int start = i, interval1 , interval2;
int gap = 2 * r - 2;
if(i == 0 || i == r - 1) interval1 = interval2 = gap;
else{
interval1 = gap - 2 * i;
interval2 = gap - interval1;

}
int k = 0;
while(1){
int pos = start + interval1 * ((k + 1) / 2) + interval2 * (k / 2);
if( pos < n){
res.push_back(s[pos]);
k++;
}
else
break;
}
}
return res;
}
};

class Solution {
public:
string convert(string s, int numRows) {
vector<string> vs(numRows, "");
int n = s.length(), i = 0;
while (i < n) {
for (int j = 0; j < numRows && i < n; j++)
vs[j].push_back(s[i++]);
for (int j = numRows - 2; j >= 1 && i < n; j--)
vs[j].push_back(s[i++]);
}
string zigzag;
for (string v : vs) zigzag += v;
return zigzag;
}
};

0
0

个人资料
• 访问：15172次
• 积分：1105
• 等级：
• 排名：千里之外
• 原创：99篇
• 转载：5篇
• 译文：0篇
• 评论：0条