``````L   C   I   R
E T O E S I I G
E   D   H   N
``````

``````L     D     R
E   O E   I I
E C   I H   N
T     S     G
``````

**方法：**这道题，我的方法是找规律，规律不好找，怎奈有心人啊，观察例1，我们可以发现，当numRows = 3时，我们会发现，排列后的图形中，第一行和最后一行每个元素之间的下标大小相差为：step=2*numRows-2;如图所示：

``````“L E E T C O D E I S H  I  R  I  N  G”
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
``````

``````import java.util.*;
public class string_test {
public static void main(String[] args) {
System.out.println("请输入一个字符串：");
Scanner sc = new Scanner(System.in);
char[] arr = sc.nextLine().toCharArray();
String str = convert(arr,3);
System.out.println(str);
}
public static String convert(char[] s,int numRows) {
if(s == null || numRows == 0) {
return s.toString();
}
int step = 2*numRows-2;
int row = 0;
int current = 0;
int currentNeibor = 0;
StringBuffer sb = new StringBuffer(s.length);
for(int i=0;i<s.length;i+=step) {
sb.append(s[i]);
}
row++;
for(;row<numRows-1;row++) {
current = row;
while (current<s.length) {
sb.append(s[current]);
currentNeibor = current+step-2*row;
if(currentNeibor<s.length) {
sb.append(s[currentNeibor]);
}
current = current+step;/*这句代码放到这里的原因是需要先插入currentNeibor这个位置的字符，
然后在插入current+step这个位置的字符，也就是例子中的先插入"O"字符，在插入"E"字符*/
}
}
for(;row<s.length;row+=step) {
sb.append(s[row]);
}
return sb.toString();
}
}
``````