Z字形变换 java实现

将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:

P   A   H   N
A P L S I I G
Y   I   R

之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"

实现一个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入: s = "PAYPALISHIRING", numRows = 3
输出: "PAHNAPLSIIGYIR"

示例 2:

输入: s = "PAYPALISHIRING", numRows = 4
输出: "PINALSIGYAHRPI"
解释:

P     I    N
A   L S  I G
Y A   H R
P     I

class Solution {
    public String convert(String s, int numRows) {
        if((s.length()==1)||(numRows==1)||(s==null))
            return s;
        char[] arr=s.toCharArray();
        StringBuffer sb=new StringBuffer(arr.length);
        
        int step=2*numRows-2;//每个满列之间的差值
        int row=0;
        int current=row;
        int currentNeibor=0;
        
       //第一行
        for (int i=0;i<arr.length;i+=step)
        {sb.append(arr[i]);}
        
        row++;
        
        //中间行
        for(;row<numRows-1;row++) 
        {
            current=row;
             
            while(current<arr.length)
            {
                sb.append(arr[current]);
                currentNeibor=current+step-2*row;
                if (currentNeibor<arr.length)
                    sb.append(arr[currentNeibor]);
                current=current+step;
                
                       
             }
         }
        
       //最后一行
         for(;row<arr.length;row+=step)
         {sb.append(arr[row]);}
        
        
        return sb.toString();
            
    }
}

 

posted on 2018-05-22 14:52  yfyfyf947  阅读(803)  评论(0编辑  收藏  举报