题目描述
原题链接:202. 快乐数
解题思路
本题的关键是两个条件的运用,一个是求和等于1时,则为快乐数;另一个是出现无限循环元素,则不为快乐数。
因此设置一个set,记录是否出现循环元素。若出现循环元素,则说明不为快乐数,返回false
,若出现求和后为1,则说明为快乐数,返回true
。
class Solution {
public:
bool isHappy(int n) {
unordered_set<int> record;
while(n != 1) {
int sum = 0; // 存储求和后的值
while(n != 0) {
int num = n % 10;
sum += num * num;
n /= 10;
}
n = sum;
// if(record.found(n))
if(record.find(n) != record.end()) // 不等于指向容器中最后一个元素之后位置的正向迭代器,说明找到重复元素
return false; // 出现循环的元素,则说明不为快乐数
else
record.insert(n); // 将求过的和加入到record中
}
return true;
}
};
Python
class Solution:
def isHappy(self, n: int) -> bool:
record_set = [n]
while n != 1:
sum = 0
while n != 0:
num = int(n % 10)
sum += num * num
n /= 10
n = sum
print(num)
if n in record_set:
return False
else:
record_set.append(n)
return True