我遇到了这个问题的麻烦,如果数字n
是回文,则只返回True of False。
注意:无论我在哪里____
表示需要填写空白的地方。有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
。
答案 0 :(得分:4)
这是逻辑:(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
答案 1 :(得分:0)
出色的解决方案,伙伴!也许一个小建议。您的解决方案将对所有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
空间复杂度: O(1)