思路:
直接模擬Z字變換的過程,將每個字符添加到對應的行即可。用一個計數器來記錄當前字符應該添加到哪一行,當時讓重新置0即可。在這個過程中要設置一個標記位用來規定方向,一開始是從上到下爲每一行中添加字符,當把置0後,那麼方向就要改變,換成從下到上,所以通過來控制添加的順序。
package leetcode.problem6;
import java.util.ArrayList;
import java.util.List;
class Solution {
/**
* 直接模擬Z字形變換
* @param s
* @param numRows
* @return
*/
public String convert(String s, int numRows) {
if (numRows <= 1){
return s;
}
List<StringBuilder> list = new ArrayList<>();
for (int i = 0; i < numRows; i++) {
list.add(new StringBuilder());
}
int row = 0;
boolean tag = false;
for (char c : s.toCharArray()){
if (!tag){
list.get(row).append(c);
row++;
}else {
row++;
list.get(numRows - row).append(c);
}
if (row == numRows - 1){
tag = !tag;
row = 0;
}
}
StringBuilder sb = new StringBuilder();
for (StringBuilder stringBuilder : list){
sb.append(stringBuilder);
}
return sb.toString();
}
}