he 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)
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".
/*n=numRows
Δ=2n-2 1 2n-1 4n-3
Δ= 2 2n-2 2n 4n-4 4n-2
Δ= 3 2n-3 2n+1 4n-5 .
Δ= . . . . .
Δ= . n+2 . 3n .
Δ= n-1 n+1 3n-3 3n-1 5n-5
Δ=2n-2 n 3n-2 5n-4
*/
看不懂题目怎么折返, 看了上图一目了然。
public String convert(String s, int numRows) {
if(numRows < 2){
return s;
}
StringBuilder ret = new StringBuilder();
int step = (numRows - 1) * 2;
for(int i = 0; i < numRows; i++){
for(int j = 0; j * step + i < s.length(); j++){
ret.append(s.charAt(j * step + i));
if(i != 0 && i != numRows-1 && (j+1)*step -i < s.length()){
ret.append(s.charAt((j+1)* step - i));
}
}
}
return ret.toString();
}