题目:
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"
.
思路:就是找规律。每一个zig的数量是2*行数-2,然后除了第一行和最后一行,都是有2个字符的,第一个字符和第二个字符之间相差size-2*当前行数; 可以用数字模拟个zig 就可发现规律。
代码:
public class zigzag {
public static String convert(String s, int nRows) {
if(s == null||s.length()==0||nRows<=0)
return "" ;
if(nRows ==1)
return s;
StringBuilder sBuilder = new StringBuilder();
int size = 2*nRows - 2;//每一个zig的长度为2*行数-2
for(int i = 0 ; i<nRows;i++)
{
for(int j=i;j<s.length();j+=size)
{
sBuilder.append(s.charAt(j));
if(i!=0&&i!=nRows-1&&j+size-2*i<s.length())
{
sBuilder.append(s.charAt(j+size-2*i));
}
}
}
return sBuilder.toString();
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO 自动生成的方法存根
String s = "PAYPALISHIRING";
String p = convert(s, 3);
System.out.println(p);
}
}