目录

LeetCode006 Zigzag

https://peierlong-blog.oss-cn-hongkong.aliyuncs.com/uPic/Zigzag.png

读题

把一个字符串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)

测试用例情况

https://peierlong-blog.oss-cn-hongkong.aliyuncs.com/uPic/Zigzag%201.png

The End!