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"
.
For the record...what if 4 and 5:
n=4
P I N
A L S I G
Y A H R
P I
N=5
P H
A S I
Y I R
P L I G
A N
//P I N
//A L S I G
//Y A H R
//P I
public class zigzagConversion {
public static void main(String args[]){
zigzagConversion zz = new zigzagConversion();
System.out.println(zz.convert("paypalishiring",4));
}
public String convert(String s, int nRows) {
if(s == null || s.length()==0 || nRows <=0)
return "";
if(nRows == 1)
return s;
StringBuilder res = new StringBuilder();
int size = 2*nRows-2;
for(int i=0;i<nRows;i++)
{
for(int j=i;j<s.length();j+=size)
{
res.append(s.charAt(j));
if(i!=0 && i!=nRows-1 && j+size-2*i<s.length())
{
System.out.println("size:"+size+" i:"+i+" j:"+j+" is "+s.charAt(j+size-2*i));
res.append(s.charAt(j+size-2*i));
}
}
}
return res.toString();
}
}