Z字形变换
力扣
建立一个StringBuilder数组,纵向顺序插入字母,同时维护一个变量表示方向是向上还是向下
用一个变量表示行数,到第一行是,重置方向向下,到最后一行时重置方向向上
不需要考虑具体的结构,按照顺序插入即可
class Solution {
public String convert(String s, int numRows) {
if(numRows == 1) return s;
//新建一个字符数组
StringBuilder[] line = new StringBuilder[numRows];
//初始化
for(int i = 0; i < numRows; i++){
line[i] = new StringBuilder();
}
//定义一个表示上下的变量,1表示向下,-1表示向上,初始时向下
int increase = 1;
int lin = 0;//标记行数
//遍历字符串
for(int i = 0; i < s.length(); i++){
line[lin].append(s.charAt(i));
if(lin == 0) increase = 1;
if(lin == numRows - 1) increase = -1;
lin += increase;
}
//合并字符串
StringBuilder res = new StringBuilder();
for(int i = 0; i < numRows; i++){
res.append(line[i]);
}
return res.toString();
}
}
需要注意的是:
1.StringBuilder数组及初始化
StringBuilder[] line = new StringBuilder[numRows];
for(int i = 0; i < numRows; i++){
line[i] = new StringBuilder();
}
或者可以将 numRows 替换为 line.length
2. StringBuilder 转 String
res.toString();
版权声明:本文为MissAir2019原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。