题目
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"
.
思路
注意 vector<vector<char> > 赋初值时,用'\0' ,而不用 ' '
class Solution {
public:
string convert(string s, int nRows) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int len = s.length();
if(len<2) return s;
if(nRows<=1) return s;
vector<vector<char> > matrix(nRows,vector<char>(len,'\0'));
int k=0;
int i=0,j=0;
bool dir=true;
while(k<len) {
matrix[i][j]=s[k];
if(dir) {
i=i+1;
if(i==nRows) {
i=i-2;
j=j+1;
dir=false;
}
} else {
i=i-1;
j=j+1;
if(i<0) {
i=i+2;
dir=true;
}
}
k++;
}
string res = "";
for(int i=0;i<nRows;i++) {
for(int j=0;j<len;j++) {
if(matrix[i][j]!='\0')
res = res+matrix[i][j];
}
}
return res;
}
};