202快乐数
    题目:
    编写一个算法来判断一个数 n 是不是快乐数。

    「快乐数」 定义为:
    对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
    然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
    如果这个过程 结果为 1,那么这个数就是快乐数。
    如果 n 是 快乐数 就返回 true ;不是,则返回 false 。


    实例:
    示例 1:
    输入:n = 19
    输出:true
    image.png
    示例 2:
    输入:n = 2
    输出:false


    思路:
    找出重复的数字避免进入循环。(但是我做的时候不知道一个概念,不管是不是欢乐数,拆分平方和的过程都会陷入循环,一种是欢乐数的循环(都是1),一种是不是欢乐数的循环(但是重复的几个数是已知的,力扣第三个方法用的就是这个原理),所以我们要做的就是找到进入1的循环并及时终止。)
    一、哈希表
    image.png
    二、快慢指针
    image.png
    用快和慢两个数模拟快慢指针,每次快的数转换两次,慢指针转换一次;
    快指针会追上慢指针,只需要判断当他们相等的时候数值是否等于1即可;
    如果=1,是欢乐数,否则不是。
    三、数学法(循环的数已知)
    image.png
    题解:

    1. class Solution {
    2. public:
    3. int nums(int n)
    4. {
    5. int sum=0;
    6. while(n)
    7. {
    8. int k=n%10;
    9. n=n/10;
    10. sum+=k*k;
    11. }
    12. return sum;
    13. }
    14. bool isHappy(int n) {
    15. int slow=n,fast=nums(n);
    16. do{
    17. slow=nums(slow);
    18. fast=nums(nums(fast));
    19. }while(slow!=fast);
    20. return (slow==1);
    21. }
    22. };