6. zigzag conversion

The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like this: (you may want to display this pattern in a fixed font for better legibility)

1
2
3
P   A   H   N
A P L S I I G
Y I R

And then read line by line: "PAHNAPLSIIGYIR"

Write the code that will take a string and make this conversion given a number of rows:

1
string convert(string s, int numRows);

Example 1:

1
2
Input: s = "PAYPALISHIRING", numRows = 3
Output: "PAHNAPLSIIGYIR"

Example 2:

1
2
3
4
5
6
7
8
Input: s = "PAYPALISHIRING", numRows = 4
Output: "PINALSIGYAHRPI"
Explanation:

P I N
A L S I G
Y A H R
P I
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
class  {
public String convert(String s, int nRows) {
if (s == null || nRows == 1)
return s;
int len = s.length();
if (len <= nRows)
return s;
StringBuffer res = new StringBuffer();
int size = 2 * nRows - 2;
for (int i = 0; i < nRows; i++) {//每一行的元素
char ch;
for (int j = i; j < len; j += size) {
ch = s.charAt(j);
res.append(ch);
if (i != 0 && i != nRows - 1) {//如果是中间元素单独处理
int tmp = j + size - 2 * i;
if (tmp < len) {
ch = s.charAt(tmp);
res.append(ch);
}
}
}
}
return res.toString();
}

}