算法day18 快乐数
题目描述
思路:
这道题我们试图判断一个数是否符合快乐数的定义。我们可以将其转化为,在判断的n在快乐数算法的演变下转化的数值是否等于1,同时排除掉重复的转化值。那么对于唯一元素的收容的数据结构,我们可以使用集合unordered_set。我们通过在循环中判断sum,并收集sum,最终按照条件的情况返回bool值。
代码如下
int GetSum(int n) {//得到每一轮的拆分后的平方和
int sum = 0;
while (n) {
sum += (n % 10) * (n % 10);
n /= 10;
}
return sum;}
bool isHappy(int n) {
unordered_set<int> SET;
while (1) {
int sum = GetSum(n);
if (sum == 1) {
return true;
}
if (SET.find(sum) != SET.end()) {//要是找到了,说明曾经收集过,已经重复,那就该返回了
return false;
}
else {
SET.insert(n);
}
n = sum;
}
}
时间复杂度:O(logn)
空间复杂度:O(logn)
END