题目
![](https://img.haomeiwen.com/i3668955/2fab823a154e47e8.png)
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zigzag-conversion
注意:有可能字符串长度比所需要的numRows要短
解法1:利用StringBuilder
创建每一行的容器
遍历字符串每个字符char
——给每一行的容器添字符char
——遇到两边就转头
创建新容器目的是把它们变成一行
遍历每一行,前后拼接
返回新字符串
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());
}
//找位置插进去
int curRow=0;
boolean goingDown=false;
for(char c:s.toCharArray()){
//拿到每一行给后面接一个chars
rows.get(curRow).append(c);
//判断接下来走哪一行
if(curRow==0||curRow==numRows-1){
//只是在第一行和最后一行的时候做判断
//也就是说相当于给了一个箭头方向牌指示
//碰到两边看到方向牌的话就改变方向
goingDown=!goingDown;
}
//语句判断更改行数
//如果是ture的话就往下走,如果是false的话就往上走
curRow+=goingDown?1:-1;
}
//整合每一row变成一行
//创建新容器
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();
}
}
相关知识:
List<StringBuilder> row=new ArrayList<>()
StringBuilder是一个可变的字符序列
row.add(new StringBuilder())
toCharArray() 方法将字符串转换为字符数组。
for (char c : s.toCharArray())
注意:StringBuilder当中是append,List当中是add
image.png
网友评论