2016-11-15 1 views
0

Le code suivant est pour un exercice de codage sur Leetcode - Je vérifie si un nombre est un palindrome ou non (sans le convertir en une chaîne). Je ne parviens pas à comprendre pourquoi ce code échoue pour des chiffres comme 11, 22, 33 etc.Vérifiez si un nombre est un palindrome - échoue pour 11,22 etc.

def isPalindrome(self, x): 
    #x is an integer 
    digit = 0 
    reverse = 0 

    #Single digit numbers will be palindromes 
    if x >= 0 and x < 10: 
     return True 

    #fetch individual digits and build the reverse number  
    while x > 0: 
     digit = x % 10 
     reverse = (reverse * 10) + digit 
     x = x/10 

    if x == reverse: 
     return True 
    else: 
     return False 
+2

Vous modifiez 'x' plusieurs fois dans votre boucle, puis vous essayez de l'utiliser dans votre comparaison par la suite. Cela ne retournera jamais "True" pour les nombres à plusieurs chiffres. – Phylogenesis

+0

@Phylogenesis C'est aussi vrai mais pas assez. OP, exécutez le code dans votre esprit pour 22 .. Ne remarquez-vous rien de mal avec cela? comme le 'reverse = (reverse * 10) + digit' ou le' x = x/10'? –

+0

comme c'est idiot de ma part! Merci d'avoir éclairci ça – user1528508

Répondre

0

Il est beaucoup plus facile de le convertir en une chaîne et vérifier cette façon. J'ai utilisé [::-1] pour inverser la chaîne et ensuite comparé avec l'original.

def isPalindrome(x): 
    if str(x) == str(x)[::-1]: 
     return True 
    else: 
     return False 

for x in range(100): 
    print(x, isPalindrome(x)) 

Si vous voulez également vérifier que sa fait un certain nombre, utilisez x.isdigit(), ce sera de retour True pour les entiers.