Lectura

Conversión en zigzag (Java, Python, PHP, C++, JavaScript)

El ejercicio consiste en tomar un string y reorganizarlo en una forma zigzag a través de un número de filas.

El objetivo del problema es escribir un algoritmo que tome una cadena y el número de filas y devuelva la cadena reorganizada en un patrón zigzag a través de las filas

s = "PAYPALISHIRING" totalDeFilas = 3 P H A N A P L S I I G Y I R P A H N A P L S I I G Y I R

Explicación del ejercicio Paso por paso

Código de la solución

Java

public class Solution {
    /**
     * @param String s
     * @param Integer totalFilas
     * @return String
     */
    public String convert(String s, int totalFilas) {
        if (totalFilas == 1) return s;

        // paso#1
        String[] posiciones = new String[totalFilas];
        Arrays.fill(posiciones, "");

        // paso#2
        int size = s.length();
        int direccion = 1;
        int filaActual = 0;

        // paso#3
        for (int i = 0; i < size; i++) {
            // paso#4
            posiciones[filaActual] += s.charAt(i);

            // paso#5
            if (filaActual == 0) direccion = 1;
            else if (filaActual == totalFilas - 1) direccion = -1;

            // paso#6
            filaActual += direccion;
        }

        // paso#7
        return String.join("", posiciones);
    }
}

Python

class Solution(object):
    def convert(self, s, totalFilas):
        if totalFilas == 1:
            return s

        # paso#1
        posiciones = [""] * totalFilas

        # paso#2
        size = len(s)
        direccion = 1
        filaActual = 0

        # paso#3
        for i in range(size):
            # paso#4
            posiciones[filaActual] += s[i]

            # paso#5
            if filaActual == 0:
                direccion = 1
            elif filaActual == totalFilas - 1:
                direccion = -1

            # paso#6
            filaActual += direccion

        # paso#7
        return "".join(posiciones)

PHP

class Solution {

    /**
     * @param String $s
     * @param Integer $totalFilas
     * @return String
     */
    function convert($s, $totalFilas) {
        if ($totalFilas === 1) return $s;

        // paso#1
        $posiciones = array_fill(0, $totalFilas, "");

        // paso#2
        $size = strlen($s);
        $direccion = 1;
        $filaActual = 0;

        // paso#3
        for ($i = 0; $i < $size; $i++) {
            // paso#4
            $posiciones[$filaActual] .= $s[$i];

            // paso#5
            if ($filaActual === 0) $direccion = 1;
            else if ($filaActual === $totalFilas - 1) $direccion = -1;

            // paso#6
            $filaActual += $direccion;
        }

        // paso#7
        return implode("", $posiciones);
    }
}

C++

class Solution {
public:
    string convert(string s, int totalFilas) {
        if (totalFilas == 1) return s;

        // paso#1
        vector posiciones(totalFilas, "");

        // paso#2
        int size = s.length();
        int direccion = 1;
        int filaActual = 0;

        // paso#3
        for (int i = 0; i < size; i++) {
            // paso#4
            posiciones[filaActual] += s[i];

            // paso#5
            if (filaActual == 0) direccion = 1;
            else if (filaActual == totalFilas - 1) direccion = -1;

            // paso#6
            filaActual += direccion;
        }

        // paso#7
        string resultado = "";
        for (const string& str : posiciones) {
            resultado += str;
        }
        return resultado;
    }
};

JavaScript

/**
 * @param {string} s
 * @param {number} totalFilas
 * @return {string}
 */
var convert = function(s, totalFilas) {
    if (totalFilas === 1) return s;

    // paso#1
    const posiciones = new Array(totalFilas).fill("");

    // paso#2
    const size = s.length;
    let direccion = 1;
    let filaActual = 0;

    // paso#3
    for (let i = 0; i < size; i++) {
        // paso#4
        posiciones[filaActual] += s.charAt(i);

        // paso#5
        if (filaActual === 0) direccion = 1;
        else if (filaActual === totalFilas - 1) direccion = -1;

        // paso#6
        filaActual += direccion;
    }

    // paso#7
    return posiciones.join("");
};

Si te gustó el contenido, ¡visita mi canal de YouTube para ver más explicaciones sobre algoritmos y estructuras de datos!