逐步解析力扣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形遍历
开始给字符串遍历
- 取单个字符,给当前行append对应的字符
- 如果当前行是最顶上或最底下的行,则布尔取反
- 如果从最顶上开始,当前行+1,代表向下遍历;如果从最底下开始,当前行-1,代表向上遍历
最后再遍历一次,取出每一行append完的sb,形成新字符串返回
只需要三次遍历,不管怎么取时间复杂度都是O(n)
以上是关于逐步解析力扣6. Z 字形变换(使用布尔控制上下遍历)的主要内容,如果未能解决你的问题,请参考以下文章
6. Z 字形变换(leetcode力扣算法 - java / rust)