# leetcode的每日一题更新(ZigZag Conversion)

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".

S.png

``````    public String convert(String s, int numRows) {
if(s=="")return "";
if(numRows<2)return s;
String result="";

boolean bian=true;
for(int i=0;i<s.length();i+=numRows+numRows-2) {
result+=s.charAt(i);
}
for(int i=1;i<numRows-1;i++) {
for(int j=i;j<s.length();j++) {
result+=s.charAt(j);
if(bian) {j+=(numRows-i-1)*2-1;bian=false;continue;}
if(!bian) {j+=i*2-1;bian=true;}
}
bian=true;
}
for(int i=numRows-1;i<s.length();i+=numRows+numRows-2) {
result+=s.charAt(i);
}
return result;
}
``````

``````    public String convert(String s, int nRows) {
char[] c = s.toCharArray();
int len = c.length;
StringBuffer[] sb = new StringBuffer[nRows];
for (int i = 0; i < sb.length; i++) sb[i] = new StringBuffer();

int i = 0;
while (i < len) {
for (int idx = 0; idx < nRows && i < len; idx++) // vertically down
sb[idx].append(c[i++]);
for (int idx = nRows-2; idx >= 1 && i < len; idx--) // obliquely up
sb[idx].append(c[i++]);
}
for (int idx = 1; idx < sb.length; idx++)
sb[0].append(sb[idx]);
return sb[0].toString();
}
``````