标签:
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) { int n=s.length(); if (n==0||n==1||nRows==1||n<=nRows) { return s; } string temp=""; int k=(n-1)/(2*nRows-2); for (int i=0;i<nRows;i++) { if ((i==0)||(i==nRows-1)) { temp+=s[i]; for (int j=1;(j<=k)&&((i+j*(2*nRows-2))<n);j++) { temp+=s[i+j*(2*nRows-2)]; } } else { temp+=s[i]; int ntemp=i; int klast=(n-1-(nRows-1))/(2*nRows-2); int kk=(klast!=k)?(2*k):(2*k+1); for (int j=1;((j<=kk)&&(ntemp<n));j++) { if (j%2) { ntemp+=(2*nRows-2*i-2); } else { ntemp+=2*i; } if (ntemp<n) { temp+=s[ntemp]; } else if(i>=nRows) { return temp; } } } } return temp; } };
标签:
原文地址:http://www.cnblogs.com/Vae98Scilence/p/4283713.html