1、题目
2、解法
class Solution {
public String convert(String s, int numRows) {
if (numRows == 1) return s;
// 根据行号,加到了对应的list中
List<StringBuilder> rows = new ArrayList<>();
// 行的个数不能超过总长度
for (int i = 0; i < Math.min(numRows, s.length()); i++) {
rows.add(new StringBuilder());
}
// 当前行号
int curRow = 0;
boolean goDown = false;
for (char c : s.toCharArray()) {
rows.get(curRow).append(c);
// 因为当前行号已经为0,加1之后就从1开始,所以提前加
if (curRow == 0 || curRow == numRows - 1) {
goDown = !goDown;
}
curRow += goDown ? 1 : -1;
}
StringBuilder all = new StringBuilder();
for (StringBuilder row : rows) {
all.append(row);
}
return all.toString();
}
}
时间复杂度O(n), 空间复杂度O(n)
3、思考
1、StringBuilder的用法。
本文介绍了一种将字符串以Z字形排列的算法实现,使用StringBuilder进行高效操作。通过控制方向和行号,将字符分配到指定行,最终合并所有行得到结果。算法的时间复杂度和空间复杂度均为O(n)。

273

被折叠的 条评论
为什么被折叠?



