leetcode-0006

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
32
33
34
35

func convert(s string, numRows int) string {
if numRows == 1 || len(s) <= numRows {
return s
}

res := bytes.Buffer{}
// p pace 步距
p := numRows*2 - 2

// 处理第一行
for i := 0; i < len(s); i += p {
res.WriteByte(s[i])
}

// 处理中间的行
for r := 1; r <= numRows-2; r++ {
// 添加r行的第一个字符
res.WriteByte(s[r])

for k := p; k-r < len(s); k += p {
res.WriteByte(s[k-r])
if k+r < len(s) {
res.WriteByte(s[k+r])
}
}
}

// 处理最后一行
for i := numRows - 1; i < len(s); i += p {
res.WriteByte(s[i])
}

return res.String()
}