我很难理解为什么我的代码的一个版本需要两个版本比另一个版本长两倍的时间。他们都使用相同的函数,即如果传入的数字是回文,则返回True
,否则返回False
。第一个版本平均返回True
或False
大约 1.5 秒,而第二个版本平均需要大约 .75 秒。
第一个版本:使用比较:
def isPalindrome(num):
number = str(num)
count = 0
for letter in number:
if letter is number[len(number) - count - 1]:
count += 1
return count == len(number)
第 2 版:使用 else 语句:
def isPalindrome(num):
number = str(num)
count = 0
for letter in number:
if letter is number[len(number) - count - 1]:
count += 1
else:
return False
return True
在回文中,这两个函数是等价的:它们采取相同的n步数。如果回文在早期中断,则第二个函数会更早返回,而第一个函数会继续递增count
直到字符串的最后一个元素。
例:
"abcdefgh1234554321hgfedcba" -> both take n steps.
"bcdefgh1234554321hgfedcba" -> 2nd takes 1 step and return, while 1st takes n steps.
第一个代码版本总是检查所有数字,即使它知道数字不能是回文。
第二个代码版本不这样做。