使用集合来做快乐数
这题归类于新手入门120里的集合篇了,但我翻题解发现,用cpp的除了哈希就是双指针,于是自己上手试试,做这题做一半思路就断了,向神秘力量借了点东西,才知道原来是不知道快乐数的定义导致的;
快乐数:如果数字不能变为1,则会进入一个不包含1的循环。例如,2不是快乐数,它会进入循环:2→4→16→37→58→89→145→42→20→4→...(在4处开始循环);
这里我们用集合的话,可以使用一个集合来记录已经出现过的数字,如果某个数字重复出现,说明进入了循环,那么这个数就不是快乐数。如果计算过程中得到了1,那么就是快乐数。 (虽然我一开始在用if写石山)
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return bool布尔型
*/
bool happynum(int n) {
// write code here
// 使用集合记录已经出现过的数字
multiset<int> s;
while (n != 1)
{
// 如果当前数字已经出现过,说明进入了循环,不是快乐数
if (s.count(n))
{
return false;
}
//未出现,记录当前数字
s.insert(n);
//计算各位数字平方和
int sum = 0;
int temp = n;
while (temp != 0)
{
int digit = temp % 10;
sum += digit * digit;
temp /= 10;
}
n = sum; //更新n的值
}
//如果n==1,跳出循环
return true;
}
};

京公网安备 11010502036488号