深入解析LeetCode--字符串的Z字形變換
題目簡述在LeetCode中有一道關于字符串Z字形變換的題目,要求將一個給定字符串根據給定的行數,以從上往下、從左到右進行Z字形排列。本篇文章將分享通過遍歷字符串來填充各行數據,然后再逐行輸出的算法
題目簡述
在LeetCode中有一道關于字符串Z字形變換的題目,要求將一個給定字符串根據給定的行數,以從上往下、從左到右進行Z字形排列。本篇文章將分享通過遍歷字符串來填充各行數據,然后再逐行輸出的算法。
解題思路
在解題前,我們先拋開題目描述,僅從最終的Z字形輸出來看,其本質是遍歷字符串,將各個字符輸出到不同行中。核心在于行號的變化規則:當處于第一行時,行號遞增;當來到最后一行時,行號遞減。
代碼實現
首先,根據給定的行數和字符串長度確定最終輸出的行數,然后創建相應數量的StringBuilder列表用于存儲每行的字符。接著,遍歷字符串的所有字符,根據不同行號將字符添加到對應的StringBuilder中,關鍵在于處理行號的變化規則。
```java
public String convert(String s, int numRows) {
if (numRows 1) return s;
List
for (int i 0; i < Math.min(numRows, s.length()); i ) {
(new StringBuilder());
}
int curRow 0;
boolean goingDown false;
for (char c : ()) {
(curRow).append(c);
if (curRow 0 || curRow numRows - 1) goingDown !goingDown;
curRow goingDown ? 1 : -1;
}
StringBuilder result new StringBuilder();
for (StringBuilder row : rows) {
(row);
}
return ();
}
```
測試與輸出
通過編寫主方法進行測試,可以驗證上述算法的正確性。
```java
public static void main(String[] args) {
Solution solution new Solution();
String input "LEETCODEISHIRING";
int numRows 3;
String output (input, numRows);
(output);
}
```
經過測試,控制臺輸出結果符合預期,證明算法實現正確。LeetCode上也有相關題目,歡迎進一步挑戰和學習。