LeetCode202:快乐数

bool isHappy(int n) {
    //Leetcode202:快乐数
    int slow = n;
    int fast = getNext(n);
    while((fast!=1)&&(slow!=fast)){
        slow = getNext(slow);
        fast = getNext(getNext(fast));
    }
    return (fast==1);
    
}

int getNext(int num){
    int totalSum = 0;
    while(num>0){
        int rev = num%10;
        totalSum = totalSum + rev*rev;
        num= num/10;
    }
    return totalSum;
}

快乐数
【题目描述】
编写一个算法来判断一个数 n 是不是快乐数。

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

如果 n 是快乐数就返回 True ;不是,则返回 False 。

【思路】
这题可以转换为判断链表中是否有环
可以用快慢指针
写一个辅助的函数 getNext() 求出相应数的下一个循环
如果为1 结束循环
如果不为1 则继续 直到快慢指针相遇

由于一些有的没的的原因
这个数的迭代是不会趋向无限大的 所以只会进入循环 或者到1
不需要处理数增加到无限大的情况
可以参考官网的解释
😀

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。