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
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!