leetcode-快乐树

自己写的:

复制代码
class Solution:
    def isHappy(self, n: int) -> bool:
        n_temp = n  # 用n_temp保存当前的数字,以便迭代过程中使用
        count = 0  # 用于计数,避免无限循环,设定最多迭代10次

        while count < 10:  # 最多迭代10次
            n_str = str(n_temp)  # 将当前数字转换为字符串,以便分解每一位数字
            n_list = []  # 用于存储每一位数字的列表
            res = 0  # 用于存储每位数字的平方和

            # 将当前数字的每一位分解并存储到列表中
            for i in n_str:
                n_list.append(int(i))

            # 计算每位数字的平方和
            for i in n_list:
                res += i**2

            if res == 1:
                return True  # 如果平方和为1,表示是快乐数,返回True
            else:
                n_temp = res  # 更新当前数字为平方和,准备下一轮迭代
                count += 1  # 增加迭代次数

        return False  # 如果迭代10次仍未找到平方和为1的情况,返回False,表示不是快乐数
复制代码

gpt改进:

复制代码
class Solution:
    def isHappy(self, n: int) -> bool:
        # 辅助函数:计算每位数字的平方和
        def get_digit_square_sum(num):
            return sum(int(digit)**2 for digit in str(num))

        seen = set()  # 用一个集合来存储已经出现过的数字,避免无限循环

        # 当数字不等于1且未出现在集合中时循环
        while n != 1 and n not in seen:
            seen.add(n)  # 将当前数字加入集合
            n = get_digit_square_sum(n)  # 计算下一轮迭代的数字

        return n == 1  # 判断循环结束的条件是数字变为1或者已经在集合中出现过
复制代码

判断是否是无限循环:

复制代码
class Solution:
    def isHappy(self, n: int) -> bool:
        n_temp = n  # 用 n_temp 保存当前的数字,以便迭代过程中使用
        seen = set()  # 用一个集合来存储已经出现过的数字,避免无限循环

        while True:  # 无限循环,直到返回True或False
            n_str = str(n_temp)  # 将当前数字转换为字符串,以便分解每一位数字
            n_list = []  # 用于存储每一位数字的列表
            res = 0  # 用于存储每位数字的平方和

            # 将当前数字的每一位分解并存储到列表中
            for i in n_str:
                n_list.append(int(i))

            # 计算每位数字的平方和
            for i in n_list:
                res += i**2

            if res == 1:
                return True  # 如果平方和为1,表示是快乐数,返回True
            elif res in seen:
                return False  # 如果平方和已经出现过,表示陷入循环,返回False
            else:
                print(f"res:{res}")  # 打印当前平方和,可选的调试语句
                n_temp = res  # 更新当前数字为平方和,准备下一轮迭代
                seen.add(n_temp)  # 将当前数字加入集合,表示已经处理过

# 注意:在实际使用时,可能需要去掉 print 语句以减少输出信息,除非进行调试。
复制代码

 

posted @   Junior_bond  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示