Проверьте, является ли число палиндромом, не превращая его в строку - PullRequest
0 голосов
/ 02 июня 2018

У меня возникла проблема с этой проблемой, которая просто возвращает True of False, если число n является палиндромом.

Примечание: где бы у меня ни было, ____ указывает, где находится пробел, который необходимо заполнить. Есть 2 пробела.

def is_palindrome(n):
    x, y = n, 0
    f = lambda: ____
    while x > 0:
        x, y = ____ , f()
    return y == n

Я потратил на это около часа.Я обнаружил, что размещение x//10 во втором пробеле позволит функции выполнять итерацию по количеству цифр в n.Затем сводится к функции f.

В идеале при каждом вызове следует добавлять последнюю цифру в n к новому номеру y.Таким образом, если n = 235, цикл while будет повторяться 3 раза, и каждый раз, когда вызывается f(), он должен добавить 5, 3 и 2 к значению y.

1 Ответ

0 голосов
/ 02 июня 2018

Вот логика: (y * 10) + x % 10

def is_palindrome(n):
    x, y = n, 0
    f = lambda: (y * 10) + x % 10
    while x > 0:
        x, y = x//10 , f()
    return y == n

print(is_palindrome(123454321))
# True
print(is_palindrome(12))
# False

y*10 перемещает ток y влево на 1 цифру, а x%10 добавляет последнюю цифру.

print(is_palindrome(235))
# False

Предварительная итерация: x = 235, y = 0

Первая итерация: x = 23, y = 5

Вторая итерация: x = 2, y = 53

Третья итерация: x = 0, y = 532

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...