返回比较与仅返回True或False所需的时间

时间:2018-09-02 02:05:30

标签: python time comparison asymptotic-complexity

我无法理解为什么我的代码的一个版本花费的时间是另一个版本的两倍。他们两个都具有相同的功能,如果传入的数字是回文,则返回True,否则返回False。第一个版本平均需要1.5秒才能返回TrueFalse,而第二个版本平均需要大约0.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)

第二版:使用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

2 个答案:

答案 0 :(得分:0)

在回文上,这两个功能是等效的:它们采用相同的n步数。如果回文式尽早中断,则第二个函数将更早返回,而第一个函数将继续增加count直到字符串的最后一个元素。

示例:

"abcdefgh1234554321hgfedcba" -> both take n steps.
"bcdefgh1234554321hgfedcba" -> 2nd takes 1 step and return, while 1st takes n steps.

答案 1 :(得分:-1)

第一个代码版本始终检查所有数字,即使它知道该数字不能是回文。

第二个代码版本不这样做。