個人題解網 https://www.b2bchain.cn/6190.html
//將一個給定字符串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。
//
// 比如輸入字符串爲 "LEETCODEISHIRING" 行數爲 3 時,排列如下:
//
// L C I R
//E T O E S I I G
//E D H N
//
//
// 之後,你的輸出需要從左往右逐行讀取,產生出一個新的字符串,比如:"LCIRETOESIIGEDHN"。
//
// 請你實現這個將字符串進行指定行數變換的函數:
//
// string convert(string s, int numRows);
//
// 示例 1:
//
// 輸入: s = "LEETCODEISHIRING", numRows = 3
//輸出: "LCIRETOESIIGEDHN"
//
//
// 示例 2:
//
// 輸入: s = "LEETCODEISHIRING", numRows = 4
//輸出: "LDREOEIIECIHNTSG"
//解釋:
//
//L D R
//E O E I I
//E C I H N
//T S G
// Related Topics 字符串
import java.util.ArrayList;
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public String convert(String s, int numRows) {
//特殊情況 只有一行的時候
if (numRows == 1) return s;
//z字 從上到下 從下到上 依次存入對應的行內,直到全部遍歷完成
List<StringBuilder> row=new ArrayList<>();
for (int i = 0; i <numRows ; i++) {
row.add(new StringBuilder());
}
int flag=-1;
int i=0;
for(Character c:s.toCharArray()){
if(i==0 || i==row.size()-1) flag=-flag;
row.get(i).append(c);
i+=flag;
}
StringBuilder ans=new StringBuilder();
for(StringBuilder sb:row){
ans.append(sb);
}
return ans.toString();
}
}
//leetcode submit region end(Prohibit modification and deletion)