检查数字是否为回文而不将其更改为字符串
Check if a number is a palindrome without changing it into string
我遇到了这个问题,如果数字 n
是回文,那么 return True of False。
注:我这里有一个____
表示哪里有空格需要填写,有2个空格space。
def is_palindrome(n):
x, y = n, 0
f = lambda: ____
while x > 0:
x, y = ____ , f()
return y == n
我为此花了大约一个小时。我发现将 x//10
放在第二个空格 space 中将允许函数迭代 n
中的位数。然后归结为函数 f
。
理想情况下,每次调用它时,都应将 n
中的最后一位数字添加到新号码 y
中。这样,如果n = 235
,while循环会迭代3次,每次调用f()
,就应该加上5
、3
、2
,到值 y
。
逻辑如下:(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
出色的解决方案,伙计!也许一个小建议。您的解决方案迭代所有 n 位数字,但您只需迭代 n/2 位数字。此外,您可以直接处理负值,因为它们不是回文。
def is_palindrome(x):
if x < 0 or (x % 10 == 0 and x != 0):
return False
head, tail = x, 0
while head > tail:
head, tail = head // 10, tail * 10 + head % 10
# When the length is an odd number, we can get rid of the middle digit by tail // 10
return head == tail or head == tail // 10
时间复杂度:O(log(n)) 因为我们在每次迭代中除以 10
Space 复杂度:O(1)
我遇到了这个问题,如果数字 n
是回文,那么 return True of False。
注:我这里有一个____
表示哪里有空格需要填写,有2个空格space。
def is_palindrome(n):
x, y = n, 0
f = lambda: ____
while x > 0:
x, y = ____ , f()
return y == n
我为此花了大约一个小时。我发现将 x//10
放在第二个空格 space 中将允许函数迭代 n
中的位数。然后归结为函数 f
。
理想情况下,每次调用它时,都应将 n
中的最后一位数字添加到新号码 y
中。这样,如果n = 235
,while循环会迭代3次,每次调用f()
,就应该加上5
、3
、2
,到值 y
。
逻辑如下:(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
出色的解决方案,伙计!也许一个小建议。您的解决方案迭代所有 n 位数字,但您只需迭代 n/2 位数字。此外,您可以直接处理负值,因为它们不是回文。
def is_palindrome(x):
if x < 0 or (x % 10 == 0 and x != 0):
return False
head, tail = x, 0
while head > tail:
head, tail = head // 10, tail * 10 + head % 10
# When the length is an odd number, we can get rid of the middle digit by tail // 10
return head == tail or head == tail // 10
时间复杂度:O(log(n)) 因为我们在每次迭代中除以 10
Space 复杂度:O(1)