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 RAnd 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"
.
Subscribe to see which companies asked this question
package leetcode;
/**
* 很容易看出外层的循环周期;
* 若s="0123456789",当numRows=3时,打印出 048/159/26
* 当numRows=4时,打印出06/17/28/39
* 故循环周期是cyc=2*numRows-2;
* 对于首行和末行之间的行,期间还有一个周期,这一次距离本周期起始字符的距离是 2*nRows-2-2*i
* @author Mouse
*
*/
public class Solution {
public static String convert(String s, int numRows) {
// 获得s字符串的长度
int len = s.length();
if (len<=2||numRows==1) {
return s;
}
String str="";
int cyc=2*numRows-2;//循环周期
for (int i = 0; i < numRows; i++) {
for (int j = i; j <len; j+=cyc) {
str+=s.charAt(j);
if (i>0&&i<numRows-1) {//非首行和末行时还要加一个
int t=j+cyc-2*i;
if (t<len) {
str+=s.charAt(t);
}
}
}
}
return str;
}
public static void main(String[] args) {
convert("0123456789", 3);
}
}