将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:

P   A   H   N
A P L S I I G
Y   I   R
之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。

 

示例 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

6. Z 字形变换_java

6. Z 字形变换_结果集_02

可以看出当前行是0 或者 n-1时候,进行方向翻转,

6. Z 字形变换_i++_03

 

class Solution {
    public String convert(String s, int numRows) {
        /**
        当行号=0  || =n-1时 方向翻转
        只需要定义一个集合,里面装的是当前行的内容即可  (集合里面装sb,来做拼接)
         */

         boolean down=false;//定义当前方向
         int curRow=0;//定义当前行
         List<StringBuilder> list=new ArrayList();//每一行
         for(int i=0;i<s.length();i++){
             list.add(new StringBuilder());//为每一行初始化
         }

         for(int i=0;i<s.length();i++){
             //字符拼接到当前行
             list.get(curRow).append(s.charAt(i));
            if(curRow==0||curRow==numRows-1){
                down=!down;
            }
            curRow+= down==true?1 :-1;  //如果向下走, 当前行+1   否则 当前行-1


         }

         //定义结果集

         StringBuilder sb=new StringBuilder();
         for(int i=0;i<list.size();i++){
           sb.append(list.get(i));
         }
         return sb.toString();

    }
}