题目:原题链接(简单)
解法 | 时间复杂度(n为运算次数) | 空间复杂度(n为运算次数) | 执行用时 |
---|---|---|---|
Ans 1 (Python) | O(n) | O(n) | 44ms (>73.40%) |
Ans 2 (Python) | O(n) | O(1) | 44ms (>73.40%) |
上表中的n从开始运算到变为1的运算次数,或无限循环到第一次出现重复数字的运算次数。
解法 | 时间复杂度(n为数值) | 空间复杂度 | 执行用时 |
---|---|---|---|
Ans 1 (Python) | O(logn) | O(logn) | 44ms (>73.40%) |
Ans 2 (Python) | O(logn) | O(1) | 44ms (>73.40%) |
上表中的n为需要计算是否为快乐数的数值。
LeetCode的Python执行用时随缘,只要时间复杂度没有明显差异,执行用时一般都在同一个量级,仅作参考意义。
解法一(配合哈希表遍历):
def isHappy(self, n: int) -> bool:
already = set()
while n != 1:
if n in already:
return False
already.add(n)
n = sum([int(x) * int(x) for x in str(n)])
return True
解法二(快慢指针法):
def isHappy(self, n: int) -> bool:
fast = n
slow = n
while fast != 1 and slow != 1:
fast = sum([int(x) * int(x) for x in str(fast)])
fast = sum([int(x) * int(x) for x in str(fast)])
slow = sum([int(x) * int(x) for x in str(slow)])
if fast == slow and fast != 1:
return False
return True