Oggi vediamo il seguente esercizio di LeetCode:

Given an integer x, return true if x is a palindrome, and false otherwise.

Possiamo risolvere questo problema confrontando le cifre del numero da entrambi i lati, proprio come fatto nel codice proposto.

L’idea chiave è:

  • escludiamo subito i numeri negativi, perché non possono essere palindromi
  • convertiamo il numero in stringa per poter accedere facilmente alle singole cifre
  • trasformiamo la stringa in un array di cifre
  • confrontiamo gli elementi simmetrici: il primo con l’ultimo, il secondo con il penultimo, e così via
  • se troviamo anche una sola differenza, il numero non è palindromo
  • se tutti i confronti vanno a buon fine, il numero è palindromo

Questo approccio permette di ottenere una complessità O(n), dove n è il numero di cifre, ed è semplice da implementare. Tuttavia, il ciclo potrebbe essere ottimizzato fermandosi a metà dell’array, evitando confronti ridondanti.

Detto ciò, la soluzione che proponiamo noi è la seguente:

function isPalindrome(x: number): boolean {
    if(x < 0){
        return false;
    }else{
        let digits = x.toString().split('');
        let digitsArray = digits.map(Number)
        let checked = true;
        for(let i = 0; i < digitsArray.length; i++){
            if(digitsArray[i] != digitsArray[digitsArray.length - 1 - i]){
                checked = false;
            }
        }
        return checked;
    }
};

Se hai dubbi in merito non esitare a contattarci sui nostri social, saremo più che felici di risponderti :)