这个题目很简单。
需要注意的是,边界处理。和数据测试时考虑到特殊情况。
开头加了两行代码处理特殊情况。

1 /** 2 * zigzag 3 * 2017-5-8 4 **/ 5 6 import java.io.*; 7 import java.util.*; 8 import java.lang.*; 9 10 public class Solution 11 { 12 public static String convert(String s, int numRows) 13 { 14 15 String r=new String(""); 16 if(s==null||s.length()<=0) 17 return r; 18 if(numRows==1) 19 return s; 20 int len=s.length(); 21 int t=2*numRows-2; 22 //System.out.println("t--"+t); 23 int c=(numRows-1)*(len/t+1); 24 //System.out.println("len--"+len); 25 //System.out.println("c--"+c); 26 char[][] ch=new char[numRows][c]; 27 int i=0,j=0,k=0; 28 char[] ss=s.toCharArray(); 29 for(j=0;j<numRows;j++) 30 { 31 for(k=0;k<c;k++) 32 { 33 ch[j][k]='0'; 34 } 35 } 36 j=0; 37 k=0; 38 for(i=0;i<len;i++) 39 { 40 ch[j][k]=ss[i]; 41 //System.out.println(j+"--"+k+"--"+ch[j][k]); 42 if(j<numRows-1&&(k%(numRows-1)==0)) 43 { 44 j++; 45 continue; 46 } 47 if(j==numRows-1&&(k%(numRows-1)==0)) 48 { 49 j--; 50 k++; 51 continue; 52 } 53 if(j>0&&(k%(numRows-1)!=0)) 54 { 55 j--; 56 k++; 57 continue; 58 } 59 if(j==0&&(k%(numRows-1)!=0)) 60 { 61 j++; 62 continue; 63 } 64 }/* 65 for(j=0;j<numRows;j++) 66 { 67 for(k=0;k<c;k++) 68 { 69 System.out.print(ch[j][k]); 70 } 71 System.out.println(); 72 } 73 */ 74 char[] ch1=new char[len]; 75 i=0; 76 for(j=0;j<numRows;j++) 77 { 78 for(k=0;k<c;k++) 79 { 80 if(ch[j][k]!='0') 81 { 82 ch1[i]=ch[j][k]; 83 i++; 84 } 85 86 } 87 } 88 r=String.valueOf(ch1); 89 return r; 90 } 91 public static void main(String[] args) 92 { 93 94 while(true) 95 { 96 Scanner input=new Scanner(System.in); 97 String s=input.nextLine(); 98 int numRows=input.nextInt(); 99 System.out.println(convert(s,numRows)); 100 } 101 102 } 103 104 }