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)
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:
string convert(string text, int nRows);
convert("PAYPALISHIRING", 3)
should return "PAHNAPLSIIGYIR"
.
Zigzag:即循环对角线结构
分析:这道题是一道十分简单的题目,两层循环既可。
public class Solution {
public String convert(String s, int numRows) {
if (numRows <= 1) {
return s;
}
int n = s.length();
int step = 2 * numRows - 2;(减去首尾两个端点)
StringBuffer sb = new StringBuffer();
for (int i = 0; i < numRows; i++) {
for (int j = i; j < n; j += step) {
sb.append(s.charAt(j));(每行第一个字符)
if (i != 0 && i != numRows - 1 && j + step - 2 * i < n) {
sb.append(s.charAt(j + step - 2 * i));
}
}
}
return sb.toString();
}
}