package leetcode; public class demo_6 { public String convert(String s, int numRows) { //记录列号 int numCols; String ss=""; //如果只有一行,则不是N型,所以先排除 if(numRows==1) { return ss=s; } if(s.length()%(2*numRows-2)==0) { numCols=s.length()/(2*numRows-2)*(1+numRows-2); } else { numCols=(s.length()/(2*numRows-2)+1)*(1+numRows-2); } char [][] str=new char[numRows][numCols]; for(int i=0;i<numRows;i++) { for(int j=0;j<numCols;j++) { str[i][j]='0'; } } int row=1; int col=0; //判断是否需要重新开始一列 int flag=1; str[0][0]=s.charAt(0); for(int i=1;i<s.length();i++) { if(flag==1&&row!=numRows-1) { str[row][col]=s.charAt(i); row=row+1; continue; } if(flag==1&&row==numRows-1) { str[row][col]=s.charAt(i); flag=0; row=row-1; col=col+1; continue; } if(flag==0&&row!=0) { str[row][col]=s.charAt(i); row=row-1; col=col+1; continue; } if(flag==0&&row==0) { str[row][col]=s.charAt(i); flag=1; row=row+1; continue; } } for(int i=0;i<numRows;i++) { for(int j=0;j<numCols;j++) { if(str[i][j]!='0') { ss=ss+str[i][j]; } } } return ss; } public static void main(String[] args) { // TODO Auto-generated method stub demo_6 d6=new demo_6(); String s="PAYPALISHIRING"; System.out.println(d6.convert(s, 3)); } }