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

Posted Koikoi123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逐步解析力扣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)

以上是关于逐步解析力扣6. Z 字形变换(使用布尔控制上下遍历)的主要内容,如果未能解决你的问题,请参考以下文章

6. Z 字形变换(leetcode力扣算法 - java / rust)

6. Z 字形变换(leetcode力扣算法 - java / rust)

Z字形变换 leetcode 6

控制遍历方向模拟题--Z字形变换

LeetCode6.Z字形变换(图解算法)

leetcode算法:6.Z 字形变换