6. Z 字形变换

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));
    }

}

 

上一篇:LeetCode每日刷题-6. Z字形变换


下一篇:经典算法:杨辉三角