
读题
把一个字符串Z字形(向左翻转)排列,然后输出排列后的正向顺序。
解题
遍历字符串,按Z字形顺序输出到数组中。
我们定义一个方向,来代表向下遍历还是向上遍历。
循环结束后即可输出我们想要的结构。
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
public static String convert(String s, int numRows) {
StringBuilder[] arr = new StringBuilder[numRows];
int currentIdx = 0;
boolean direction = true;
int firstLineIdx = 0;
int lastLineIdx = numRows - 1;
for (char c : s.toCharArray()) {
if (arr[currentIdx] == null) {
arr[currentIdx] = new StringBuilder();
}
arr[currentIdx].append(c);
if (direction && currentIdx < lastLineIdx) {
currentIdx++;
}
if (!direction && currentIdx > firstLineIdx) {
currentIdx--;
}
if (currentIdx == firstLineIdx || currentIdx == lastLineIdx) {
direction = !direction;
}
}
StringBuilder ans = new StringBuilder();
for (StringBuilder sb : arr) {
if (sb != null) {
ans.append(sb);
}
}
return ans.toString();
}
|
时间复杂度:O(n)
空间复杂度:O(n)
测试用例情况

The End!