題目
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/zigzag-conversion
注意:有可能字符串長度比所需要的numRows要短
解法1:利用StringBuilder
創(chuàng)建每一行的容器
遍歷字符串每個(gè)字符char
——給每一行的容器添字符char
——遇到兩邊就轉(zhuǎn)頭
創(chuàng)建新容器目的是把它們變成一行
遍歷每一行废境,前后拼接
返回新字符串
class Solution {
public String convert(String s, int numRows) {
if(numRows==1){
return s;
}
//制造每一行row
List<StringBuilder> rows = new ArrayList<>();
for (int i =0 ; i<Math.min(numRows,s.length()); i++){
rows.add(new StringBuilder());
}
//找位置插進(jìn)去
int curRow=0;
boolean goingDown=false;
for(char c:s.toCharArray()){
//拿到每一行給后面接一個(gè)chars
rows.get(curRow).append(c);
//判斷接下來走哪一行
if(curRow==0||curRow==numRows-1){
//只是在第一行和最后一行的時(shí)候做判斷
//也就是說相當(dāng)于給了一個(gè)箭頭方向牌指示
//碰到兩邊看到方向牌的話就改變方向
goingDown=!goingDown;
}
//語句判斷更改行數(shù)
//如果是ture的話就往下走雨女,如果是false的話就往上走
curRow+=goingDown?1:-1;
}
//整合每一row變成一行
//創(chuàng)建新容器
StringBuilder ret=new StringBuilder();
for(StringBuilder row:rows){
ret.append(row);//拼接在一起
}
return ret.toString();
}
}
無注釋代碼塊:
class Solution {
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 ret=new StringBuilder();
for(StringBuilder row:rows){
ret.append(row);
}
return ret.toString();
}
}
相關(guān)知識:
List<StringBuilder> row=new ArrayList<>()
StringBuilder是一個(gè)可變的字符序列
row.add(new StringBuilder())
toCharArray() 方法將字符串轉(zhuǎn)換為字符數(shù)組。
for (char c : s.toCharArray())
注意:StringBuilder當(dāng)中是append试躏,List當(dāng)中是add