一.题目

二.题目分析
给定正整数 n,循环执行操作: 把数字每一位拆开,求每位数字的平方相加,得到新数字;
- 若某一步结果等于 1 → 该数是快乐数,返回
true; - 若过程进入循环、永远到不了 1 → 不是快乐数,返回
false。
三.算法原理讲解
通过上述分析,我们可以看出,最后都会进入循环

示例一:最终会进入全为1的循环;
示例二:最终会进入几个数的循环
所以这里我们联想到链表当中带环问题,那里我们定义了两个指针,一个快指针,一个慢指针,这里也是同样如此,但是我们这里的快慢指针并不是我们之前那样想的,是一个新的思想
思路: 定义一个慢指针指向第一个**数字(本题指向的是数字)**每次计算一次平方和
快指针也指向第一个数字,每次计算两次平方和,最后两个指针会相遇,如果相遇就判断相遇点是否是1

四.编写代码

注意:按我这种写法这里只能用do...while循环,因为刚开始定义的是让快慢指针相等,如果用while就不会进入循环,用do...while想让它们走然后再判断
cpp
class Solution {
public:
int num(int cycle)
{
int num = 0;
while(cycle)
{
int bit = cycle %10;
num += bit * bit;
cycle = cycle / 10;
}
return num;
}
bool isHappy(int n) {
int slow = n;
int fast = n;
do
{
slow = num(slow);
fast = num(fast);
fast = num(fast);
}while(slow != fast);
return slow == 1;
}
};