力扣题目【6. Z 字形变换】 Java题解
6. Z 字形变换
思路:
我们通过一个数组和标志来模拟这个过程。首先是数组,数组代表的是经过Z字形变换后每一行输出的结果,这里使用StringBuilder数组。而标志表示的是变换过程中下个字符所在的方向,通过一个boolean表示,true表示向下,false表示向上。
然后需要对numRows为1的情况特殊处理,直接返回原数组。
代码
class Solution {
public String convert(String s, int numRows) {
if(numRows == 1) return s;
StringBuilder[] list = new StringBuilder[numRows];
for(int i=0;i<numRows;i++) list[i] = new StringBuilder();
int n = s.length();
int line =1;//现在在第几行
boolean direction = true;//下次移动方向
for(int i=0;i<n;i++){
list[line-1].append(s.charAt(i));
line = direction?line+1:line-1;
if(line == 1) direction = true;
else if(line == numRows) direction = false;
}
StringBuilder res = new StringBuilder();
for(StringBuilder sb:list) res.append(sb);
return res.toString();
}
}