自己写的:
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或者已经在集合中出现过
标签:digit,数字,迭代,int,res,平方和,快乐,leetcode From: https://www.cnblogs.com/yyyjw/p/18059050