#python #algorithm
#python #алгоритм
Вопрос:
Я работаю над проблемой кодирования, когда мне нужно перевернуть целое число. Если целое число имеет только 1 цифру, я возвращаю целое число таким, какое оно есть. Если оно меньше нуля, я переворачиваю его, но оставляю знак нетронутым. Я должен проверить переполнение целого числа , чтобы убедиться , что оно находится в диапазоне [−231, 231 − 1]
. Ниже приведен мой код:
def reverse(self, x: int) -> int:
if x >=0 and x <= 9:
return x
elif x > 9 and x < (2**31):
rever1 = str(x)[::-1]
return int(rever1)
elif x < 0 and x > (-2**31):
rever2 = str(x)[::-1]
rever2 = rever2[:-1]
rever2 = -1 * int(rever2)
return rever2
elif x <= (-2**31) or x >= (2**31):
return 0
Я знаю, как сделать этот код короче, так что с неэффективностью пока все в порядке. Я просто хочу знать, почему мой код терпит неудачу 1534236469
.
Как бы я ни был благодарен за любую помощь, мне будет легче, если вы просто скажете мне, почему код не работает, вместо того, чтобы дать мне быстрое решение. Весь смысл этих проблем заключается в том, чтобы учиться, поэтому это сводит на нет цель, если кто-то просто ставит ответ.
Комментарии:
1. Что такое
self
?2. Может ли это быть связано с тем, что перевернутое целое число будет больше
2**31-1
?3. @Stef, вот как отвечает Leetcode structures. Это должен быть метод класса
Solution
.
Ответ №1:
Вы проверяете входное значение, а не возвращаемое значение. Приведенный вами тестовый пример — это класс «problem»: входное число находится в диапазоне, а обратное — нет.
Вам также необходимо проверить rever1
, находится ли он в диапазоне:
elif x > 9 and x < (2**31):
rever1 = str(x)[::-1]
return int(rever1)
Может быть
elif x > 9 and x < (2**31):
rever1 = str(x)[::-1]
if rever1 < (2**31):
return int(rever1)
else:
return 0
Поскольку вы планируете соответствующим образом сократить код, я не буду вдаваться в подробности.