求快乐数, 题干中的无限循环非常重要
class Solution {
public:
//函数用来求平方和
int get(int n)
{
int sum = 0;
while (n)
{
sum += (n % 10) * (n % 10);
n = n / 10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int> se;
int sum = get(n);
while (se.find(sum) == se.end())
{
se.insert(sum);
sum = get(sum);
}
if (sum == 1)
return true;
else
return false;
}
};
这么如果数太奇怪, 感觉会用比较大的内存
改改程序
class Solution {
public:
//函数用来求平方和
int get(int n)
{
int sum = 0;
while (n)
{
sum += (n % 10) * (n % 10);
n = n / 10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int> se;
int sum = get(n);
while (1)
{
if (sum == 1)
return true;
sum = get(sum);
if (se.find(sum) == se.end())
se.insert(sum);
else
return false;
}
}
};
学习了一下202. 快乐数 - 力扣(Leetcode) 真的很妙, 思路是和142. 环形链表 II一样的
学到了使用“快慢指针”思想找出循环
class Solution {
public:
//函数用来求平方和
int get(int n)
{
int sum = 0;
while (n)
{
sum += (n % 10) * (n % 10);
n = n / 10;
}
return sum;
}
bool isHappy(int n) {
int slow = get(n);
int fast = get(slow);
while (fast != slow)
{
slow = get(slow);
fast = get(fast);
fast = get(fast);
}
return fast == 1;
}
};