Skip to content

Commit b1779c5

Browse files
authored
Refactor is_palindrome function for efficiency
Refactor palindrome check to avoid string conversion and improve logic.
1 parent 1f1c6d4 commit b1779c5

File tree

1 file changed

+12
-21
lines changed

1 file changed

+12
-21
lines changed

maths/palindrome_number.py

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,18 @@
11
def is_palindrome(number: int) -> bool:
22
"""
3-
Check whether a given integer is a palindrome.
3+
Determines if an integer is a palindrome without string conversion.
44
5-
A palindrome number reads the same forwards and backwards.
6-
7-
Examples:
8-
>>> is_palindrome(121)
9-
True
10-
>>> is_palindrome(123)
11-
False
5+
Logic:
6+
1. Filter out negative numbers and multiples of 10.
7+
2. Reverse the second half of the number.
8+
3. Compare the two halves.
129
"""
13-
number_str = str(number)
14-
return number_str == number_str[::-1]
15-
10+
if number < 0 or (number % 10 == 0 and number != 0):
11+
return False
1612

17-
if __name__ == "__main__":
18-
user_input = input("Enter a number: ").strip()
13+
reversed_half = 0
14+
while number > reversed_half:
15+
reversed_half = (reversed_half * 10) + (number % 10)
16+
number //= 10
1917

20-
if user_input.isdigit():
21-
number = int(user_input)
22-
if is_palindrome(number):
23-
print("The number is a palindrome.")
24-
else:
25-
print("The number is not a palindrome.")
26-
else:
27-
print("Please enter a valid non-negative integer.")
18+
return number == reversed_half or number == reversed_half // 10

0 commit comments

Comments
 (0)