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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/404076.html
標籤:其他
上一篇:LeetCode 1576 替換所有的問號[字串] HERODING的LeetCode之路
下一篇:雙陣列去重
