题目:
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".
思路:
我是通过找规律找到每一行应该取哪个字符。
packagestring;publicclassZigZagConversion {publicString convert(String s,intnumRows) {if(s ==null|| numRows == 1)returns;intgap = 2 * (numRows - 1);intlen =s.length();
StringBuilder sb=newStringBuilder("");for(inti = 0; i < numRows; ++i) {for(intj = i; j < len; j +=gap) {
sb.append(s.charAt(j));intnext = j + 2 * (numRows - i - 1);if(i != 0 && i != numRows - 1 && next <len)
sb.append(s.charAt(next));
}
}returnsb.toString();
}publicstaticvoidmain(String[] args) {//TODO Auto-generated method stubString s = "A";
ZigZagConversion z=newZigZagConversion();
System.out.PRintln(z.convert(s,1));
}
}