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("PAYPALISHIRIHG",3);should return "PAHNAPLSIIGYIR".
Example
Input:0123456789
Output: (rows=4)
(rows=3) 0 6
0 4 8 1 5 7
1 3 5 7 9 2 4 8
2 6 3 9
rows=3时:0481357926
rows=4时:0615724839
Solution
public class Solution {
public String convert(String s, int nRows) {
if (nRows==1) return s;
int len=s.length();
String ret="";
int step=2*nRows - 2; //本题的关键,发现循环周期的规律,即步长
for (int i=0; i<nRows;i++) {
for (int j=i;j<len; j+=step) {
ret+=s.charAt(j);
if (i>0&&i<nRows-1) { //非首行和末行的时候还要加最后一个
int t=j+step-2*i;
if (t<len) {
ret+=s.charAt(t);
}
}
}
}
return ret;
}
}