逐步解析力扣6. Z 字形变换(使用布尔控制上下遍历)

https://leetcode-cn.com/problems/zigzag-conversion/

传参numRows代表上下的行数
在这里插入图片描述
numRows为3时
在这里插入图片描述
numRows为4时

所以要先创建一个布尔,通过numRows来控制布尔

代码

 public String convert(String s, int numRows) {
        if (numRows==1) return s;
        List<StringBuilder> rows = new ArrayList<>();
        for (int i = 0; i < Math.min(numRows,s.length()); i++) {
            rows.add(new StringBuilder());
        }

        int curRow = 0;
        boolean goingDown = false;

        for (char c: s.toCharArray()) {
            rows.get(curRow).append(c);
            if (curRow==0||curRow==numRows-1) goingDown = !goingDown;
            curRow += goingDown? 1:-1;
        }
        StringBuilder result = new StringBuilder();
        for (StringBuilder row:
             rows) {
            result.append(row);
        }
        return result.toString();
    }

第一步,长度为1直接返回没什么好说的
在这里插入图片描述
然后创建一个list,作为一行。第一次遍历的目的是给每一行add一个sb,便于后面append,最后的答案其实就是遍历list取出所有的sb相加
在这里插入图片描述
curRow表示当前行数,goingDown就是前面说的一种思路,通过该布尔来为curRow加加减减,完成z形遍历
在这里插入图片描述
开始给字符串遍历

  1. 取单个字符,给当前行append对应的字符
  2. 如果当前行是最顶上或最底下的行,则布尔取反
  3. 如果从最顶上开始,当前行+1,代表向下遍历;如果从最底下开始,当前行-1,代表向上遍历
    在这里插入图片描述

最后再遍历一次,取出每一行append完的sb,形成新字符串返回
在这里插入图片描述

只需要三次遍历,不管怎么取时间复杂度都是O(n)

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>