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:
/*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 class Solution {
public String convert(String s, int numRows) {
StringBuilder sb = new StringBuilder();
for(int i=0; i< numRows; i++) {
for(int j=0; j< Math.ceil((double)s.length()/(double)(numRows+1)); i++){
if((numRows * j + i) < s.length()){
sb.append(s.charAt(numRows * j + i));
}
if(i == numRows/2 && ((((numRows + 1) * j) - 1) < s.length())) {
sb.append(s.charAt((numRows + 1) * j) - 1);
}
}
}
return sb.toString();
}
}