LeetCode-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)
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"
.
public class Solution {
public static void main(String[] args) {
System.out.println(convert("PAYPALISHIRING", 3));
}
public static String convert(String s, int nRows) {
if (nRows==1) {
return s;
}
char[] schar = s.toCharArray();//后面使用字符的部分改成s.charAt就也可以不开辟这个数组
String output = "";
int grouplen = 2 * (nRows - 1);
//①.每2n-2个元素为一组,数组中第0位和第nrow-1位只有一个输出,其他位置每次都输出两个(前提是数组不越界)。
int groupnum = s.length() / grouplen + 1;
for (int j = 0; j < nRows; j++) {
for (int i = 0; i < groupnum; i++) {
if ((grouplen * i + j) < s.length() ) {
output += schar[grouplen * i + j];
if (j != 0 && j != nRows-1 && ((i+1)*grouplen - j) < s.length() ) {//①
output += schar[((i+1)*grouplen - j)];
}
}
}
}
return output;
}
}
Runtime:478 ms
分析:
见代码注释,主要就是分组的方法,然后对多组元素位置遍历。