LeetCode HOT100 – 006

  • Post author:
  • Post category:其他


Z字形变换

力扣

建立一个StringBuilder数组,纵向顺序插入字母,同时维护一个变量表示方向是向上还是向下

用一个变量表示行数,到第一行是,重置方向向下,到最后一行时重置方向向上

不需要考虑具体的结构,按照顺序插入即可

class Solution {
    public String convert(String s, int numRows) {
        if(numRows == 1) return s;

        //新建一个字符数组
        StringBuilder[] line = new StringBuilder[numRows];
        //初始化
        for(int i = 0; i < numRows; i++){
            line[i] = new StringBuilder();
        }
        //定义一个表示上下的变量,1表示向下,-1表示向上,初始时向下
        int increase = 1;
        int lin = 0;//标记行数
        //遍历字符串
        for(int i = 0; i < s.length(); i++){
            line[lin].append(s.charAt(i));
            if(lin == 0) increase = 1;
            if(lin == numRows - 1) increase = -1;
            lin += increase;
        }
        //合并字符串
        StringBuilder res = new StringBuilder();
        for(int i = 0; i < numRows; i++){
            res.append(line[i]);
        }
        return res.toString();
    }
}

需要注意的是:

1.StringBuilder数组及初始化

        StringBuilder[] line = new StringBuilder[numRows];

        for(int i = 0; i < numRows; i++){
            line[i] = new StringBuilder();
        }

或者可以将 numRows 替换为 line.length

2. StringBuilder 转 String

res.toString();



版权声明:本文为MissAir2019原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。