6. ZigZag Conversion

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();
}

你可能感兴趣的:(6. ZigZag Conversion)