力扣刷题(第四十六天)

灵感来源 

- 保持更新,努力学习

- python脚本学习

快乐数

解题思路

快乐数的定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,或者进入无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。

方法:使用哈希集合检测循环

  • 核心逻辑:重复计算各位数字的平方和,并用哈希集合记录每次计算的结果。如果结果变为 1,则是快乐数;如果结果重复出现,则进入循环,不是快乐数。
  • 关键点:利用哈希集合的 O (1) 查找特性快速判断是否存在循环。
    class Solution:
        def isHappy(self, n: int) -> bool:
            seen = set()
            while n != 1 and n not in seen:
                seen.add(n)
                n = self.get_next(n)
            return n == 1
        
        def get_next(self, n):
            total_sum = 0
            while n > 0:
                n, digit = divmod(n, 10)
                total_sum += digit ** 2
            return total_sum

逐行解释

class Solution:
    def isHappy(self, n: int) -> bool:
        # 使用集合来记录已经出现过的数字,用于检测循环
        seen = set()
        # 当数字不等于1且未在集合中出现过时,继续循环
        while n != 1 and n not in seen:
            # 将当前数字添加到集合中
            seen.add(n)
            # 计算下一个数字(各位数字的平方和)
            n = self.get_next(n)
        # 如果最终数字为1,说明是快乐数;否则进入了循环,不是快乐数
        return n == 1
    
    def get_next(self, n):
        # 初始化各位数字的平方和
        total_sum = 0
        # 循环处理每一位数字
        while n > 0:
            # 同时获取商和余数(例如:n=19时,divmod(19, 10)返回(1, 9))
            n, digit = divmod(n, 10)
            # 将当前位的平方累加到总和中
            total_sum += digit ** 2
        # 返回计算得到的下一个数字
        return total_sum

你可能感兴趣的:(力扣每日打卡,leetcode,算法,职场和发展)