Description
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”.
Analysis
题目难度为:medium
这是一题数学题,看懂题目就好,所谓的Z排列就是如下这种形式:
1 7 1 9
2 6 8 2 8 0
3 5 9 3 7 A
4 0 4 6 B
5
Code(c )
class Solution {
public:
string convert(string s, int numRows) {
string output = "";
if (numRows < 2) return s;
int index = 2*numRows - 2;
for (int i = 0; i < numRows; ++i) {
for (int j = 0; index*j + i < s.size(); ++j) {
output += s[index*j+i];
if ( i > 0 && i < numRows-1 && (j+1)*index-i < s.size())
output += s[(j+1)*index-i];
}
}
return output;
}
};