Untitled

 avatar
unknown
java
21 days ago
1.7 kB
6
Indexable
package medium;

public class ZigZagConversion {

  public String convert(String s, int numRows) {

    if (s.length() == 1 || numRows == 1 || numRows > s.length()) {
      return s;
    }

    int rows = s.length(), cols = s.length();
    char[][] matrix = new char[rows][cols];


    int linha = 0;
    int coluna = 0;
    int descending = 1;
    for (int i = 0; i < s.length(); i++) {

      char c = s.charAt(i);

      if (linha < numRows) {
        matrix[linha][coluna] = c;
        if (linha > 0 && coluna > 0 && descending == 0) {
          linha--;
          coluna++;
        } else {
          if (linha == 0) 
            descending = 1;

          linha++;
        }

      } else {
        descending = 0;
        linha--;
        linha--;
        coluna++;
        matrix[linha][coluna] = c;
        if (linha > 0) {
            linha--;
          coluna++;
        }
        else
          linha++;
      }
    }

    StringBuilder res = new StringBuilder();

    for (int i = 0; i < numRows; i++) {

      for (int j = 0; j < matrix[i].length; j++) {

        if (res.length() == s.length())
          return res.toString();

        if (Character.isLetter(matrix[i][j]) || matrix[i][j] == '.' || matrix[i][j] == ',')
          res.append(matrix[i][j]);
      }
    }

    return res.toString();
  }

  public static void main(String[] args) {

    ZigZagConversion zigZagConversion = new ZigZagConversion();
    String res = zigZagConversion.convert("PAYPALISHIRING", 4);
    //String res = zigZagConversion.convert("ABCD", 2);

    System.out.println(res);
  }
}

// PINALSIGYAHRPI => 4
// PAHNAPLSIIGYIR => 3
Editor is loading...
Leave a Comment