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 nRows) { // Start typing your C/C++ solution below // DO NOT write int main() function if(s=="")return ""; if(nRows<=1)return s; string ret; int round=2*nRows-2;//一个V字形有多少个字符 即样例中的P A Y P,全过程就是不断重复这个V字形 int iter=s.length()/round;//多少格V字形 int lastStart=iter*round;//最后一个V字形的开始 //0 for(int i=0;i<iter;i++){ ret+=s[i*round]; } if(lastStart<s.length())ret+=s[lastStart]; //ret+=" "; for(int j=1;j<nRows-1;j++){ for(int i=0;i<iter;i++){ ret+=s[i*round+j]; ret+=s[i*round+j+(nRows-1-j)*2]; } if(lastStart+j<s.length())ret+=s[lastStart+j]; if(lastStart+j+(nRows-1-j)*2<s.length())ret+=s[lastStart+j+(nRows-1-j)*2]; //ret+=" "; } //last row for(int i=0;i<iter;i++){ ret+=s[i*round+nRows-1]; } if(lastStart+nRows-1<s.length())ret+=s[lastStart+nRows-1]; //cout<<ret<<endl; return ret; } };