[Problem]
[Solution]
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"
.
[Solution]
class Solution {说明:版权所有,转载请注明出处。 Coder007的博客
public:
string convert(string s, int nRows) {
// Note: The Solution object is instantiated only once and is reused by each test case.
if(nRows <= 1)return s;
// generate board
vector<vector<char> > board;
int i = 0, j = 0;
while(i < s.size()){
vector<char> column(nRows, ' ');
// the odd column
if(board.size() % 2 == 0){
j = 0;
while(j < nRows && i < s.size()){
column[j++] = s[i++];
}
}
else{
j = nRows-2;
while(j > 0 && i < s.size()){
column[j--] = s[i++];
}
}
board.push_back(column);
}
// generate result
string res;
for(i = 0; i < nRows; ++i){
for(j = 0; j < board.size(); ++j){
if(board[j][i] != ' '){
res += board[j][i];
}
}
}
return res;
}
};