-
Notifications
You must be signed in to change notification settings - Fork 17
Expand file tree
/
Copy pathZigZagConversion.java
More file actions
31 lines (26 loc) · 902 Bytes
/
ZigZagConversion.java
File metadata and controls
31 lines (26 loc) · 902 Bytes
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
30
31
// https://leetcode.com/problems/zigzag-conversion
// T: O(|s|)
// S: O(|s|)
public class ZigZagConversion {
public static String convert(String s, int numRows) {
if (numRows == 1) return s;
final StringBuilder result = new StringBuilder();
final int jumpSize = (numRows - 1) * 2;
// first row
for (int i = 0 ; i < s.length() ; i += jumpSize) {
result.append(s.charAt(i));
}
for (int row = 1 ; row < numRows - 1 ; row++) {
int[] jumps = {jumpSize - 2 * row, 2 * row};
for (int i = row, k = 0 ; i < s.length() ; k ^= 1) {
result.append(s.charAt(i));
i += jumps[k];
}
}
// last row
for (int i = numRows - 1 ; i < s.length() ; i += jumpSize) {
result.append(s.charAt(i));
}
return result.toString();
}
}