1、题目要求:
Determine whether an integer is a palindrome. Do this without extra space.
2、如果将数字转化为字符串,就创建了一个新的变量,会占用新的空间。这样子做的代码如下:
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
s = str(x)
l = 0
n = len(s)
r = n-1
while(l <= n/2-1):
if s[l] != s[r]:
return False
l += 1
r -= 1
else:
return True
故应该想一个不用将数字转化为字符,就可以依次取左边数字、右边数字的方法。核心是巧妙记录left,还有利用x/left/10 和 x/right/10
class Solution(object):
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
if x<0:
return False
if 0 <= x <10:
return True
len = 1
while(x/len >=10):
len = len*10
# 要注意在求len的时候x始终都得是那个x,不然在求len的时候破坏了x,就无法求后续的东西了
left = len
right = 1
while(left >= right):
if (x//left%10 != x//right%10):
return False
left /= 10
right *= 10
else:
return True
3、 Python 有两种除法操作符:
一种是单斜杠:得到的是浮点数
12321/10000=1.2321
另一种双斜杠:得到的是整数
12321/10000=1
这里应该用的是双斜杠。
4、关于在函数体前面或者中间出现return 的结果,摘自:作者:肖宇 链接:https://www.zhihu.com/question/23765556/answer/173787459
可把函数体开始到结束的语句看成是一次旅行计划,参数是我们计划携带去旅行的东西。如果没有return语句,就意味着我们不带回任何东西;如果有return语句,则意味着我们带回来一些东西,比如一些旅游照片、纪念品等(也可以直接带回原来带出去的东西)。此外,特别要注意return出现的位置,如果在函数体中间或开头就出现return,则说明这次计划并未(完全)实施,半途夭折了,return后续的语句不会执行。例如:
>>> def f(a,b):
... return a
... a = a +b
... print a
>>> x = f(1,2)
>>> x
1
该函数f执行到'return a'就结束运行了,并没有执行 'a = a+b; print a'。这个功能和循环体中的break有点像。
总而言之,一个函数体里理应执行一个return语句,返回的函数的值总不能矛盾吧。