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”.
若nRows=4
P I N
A L S I G
Y A H R
P I
Runtime: 32 ms
注意:自己给vector初始化,运行速度比默认的快
//自己初始化
vector<string> vs;
int j=0;
for(j=0;j<numRows;j++){
string s="";
vs.push_back(s);
}
//默认初始化
vector<string> vs(numRows,"");
//完整代码
#include<vector>
#include<iostream>
using namespace std;
class Solution {
public:
string convert(string s, int numRows) {
int n=s.length();
if(n<=numRows||numRows==1) return s;
vector<string> vs;
int j=0;
for(j=0;j<numRows;j++){
string s="";
vs.push_back(s);
}
vs[0].append(string(1,s[0]));
int flag=1;
int i=1;
while(i<n){
if(flag==1){
for(j=1;j<numRows;++j){
if(i<n){
vs[j].append(string(1,s[i]));
++i;
}
else
{
break;
}
}
flag=2;
}
else{
for(j=numRows-2;j>=0;--j){
if(i<n){
vs[j].append(string(1,s[i]));
++i;
}
else
{
break;
}
}
flag=1;
}
}
string res="";
vector<string>::iterator it;
for(it=vs.begin();it<vs.end();++it){
res+=(*it);
}
return res;
}
};
void main(){
string str="AB";
Solution So;
str=So.convert(str,1);
printf("%s\n",str.c_str());
}