Proseguiamo la serie sulla risoluzione di problemi algoritmici che vengono spesso richiesti durante le interview. Questo è un classico problema di programmazione in quanto è scrivere un algoritmo per sapere se un numero è palindromo o meno. Un numero palindromo è un numero che si legge allo stesso modo sia da destra che da sinistra; un esempio è il numero “121” o il numero “12344321”. Per definizione inoltre i numeri minori di 0 non sono mai palindromi mentre lo sono sempre i numeri tra 0 e 9. Propongo varie soluzioni, tutte in C# in quanto è il linguaggio che mi è più comodo anche se la logica può essere facilmente implementabile anche in altri linguaggi senza alcun problema.
Stringa
L’idea è convertire il numero in una stringa, poi utilizzare la funzione Reverse() per capovolgere la stringa in modo da poter facilmente confrontare la stringa originale con quella capovolta. Se sono uguali, il numero è un palindromo, altrimenti non lo è.
Array di caratteri
In questa soluzione, il numero viene convertito in un array di caratteri utilizzando il metodo ToCharArray()
.
Viene quindi utilizzato un ciclo per confrontare i caratteri dell’array a partire dall’inizio e dalla fine: se tutti i caratteri corrispondono, il numero è un palindromo, altrimenti non lo è.
Operazioni matematiche
Questo metodo sfrutta le divisioni e operazioni di modulo per andare a creare una versione “invertita” del numero ma senza usare la funzione Reverse() di stringhe. Una volta costruito il numero invertito basta confrontarlo con il numero originale, se è lo stesso il numero è palindromo.
Confronto testa-coda
Questo semplice algoritmo converte prima il numero in stringa in modo che possa accedere facilmente alla cifra n-esima usando le []
e poi utilizza due indici, due indici, uno all’inizio e uno alla fine della stringa, per confrontare le cifre all’inizio e alla fine del numero.
Utilizziamo un ciclo while
per continuare a confrontare le cifre finché non ci incontriamo a metà. Se troviamo due cifre non uguali, il numero non è un palindromo e quindi restituiamo false; altrimenti restituiremo true.