提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
判断一个数 n 是不是快乐数(C++实现)
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
下面提供两种解决方法。
方法一:使用哈希集合检测循环
//哈希集合检测循环法
class Solution {
public:
bool isHappy(int n) {
unordered_set<int> set;
int res = 0;
while(n){
int temp = 0;
while(n){
int a = n % 10;
temp += a * a;
n /= 10;
}
if(temp == 1) {
res = 1;
n = 0;
}
else if(set.find(temp) == set.end()){
set.insert(temp);
n = temp;
}else{
res =0;
n = 0;
}
}
return res == 1;
}
};
方法二、使用快慢指针
代码如下:
//使用快慢指针
//求下一个数
int next_num(int num){
int temp = 0;
while(num){
int a = num % 10;
temp += a * a;
num /= 10;
}
return temp;
}
class Solution {
public:
bool isHappy(int n) {
int slow = n;
//快的比慢的快一步
int fast = next_num(n);
while (fast != 1 && slow != fast){
slow = next_num(slow);
fast = next_num(next_num(fast));
}
return fast == 1;
}
};
总结
提供了两种解决办法,后者的时间复杂度要优于前者。