Leecode202. 快乐数

简介: Leecode202. 快乐数

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

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

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

解题思路:用快慢指针可以解决这种问题,定义一个求一个数每个位数上的数字的平方和的函数,然后慢指针接收快指针的结果,快指针每次不断的根据题目要求求它下一个需要求的算数和,这样最后如果快指针和慢指针相同了,每个数字都会根据 各位平方和 指向另一个数字,所以从任意数字开始进行 各位平方和 的迭代操作,就相当于在链表上游走。如果**无限循环 **但始终变不到 1,那说明肯定是链表游走到了环。

public class Solution {
    public int squareSum(int n) {
        int sum = 0;
        while(n > 0){
            int digit = n % 10;
            sum += digit * digit;
            n /= 10;
        }
        return sum;
    }
    public boolean isHappy(int n) {
        int slow = n, fast = squareSum(n);
        while (slow != fast){
            slow = squareSum(slow);
            fast = squareSum(squareSum(fast));
        };
        return slow == 1;
    }
}


相关文章
|
8月前
|
机器学习/深度学习
一篇文章讲明白hdu5698百度之星2016round2b第3题
一篇文章讲明白hdu5698百度之星2016round2b第3题
56 4
|
9月前
|
算法
[leetcode] 快乐数 E
[leetcode] 快乐数 E
|
9月前
Leecode之面试题消失的数字
Leecode之面试题消失的数字
|
9月前
|
算法 C++
快乐数(C++)
快乐数(C++)
91 0
|
9月前
|
存储 算法 Java
leetcode-202:快乐数
leetcode-202:快乐数
59 0
|
9月前
|
算法 Java C++
「LeetCode」202. 快乐数
「LeetCode」202. 快乐数
60 0
每日一题:LeetCode-202.快乐数(一点都不快乐)
每日一题:LeetCode-202.快乐数(一点都不快乐)
Leecode 面试题62. 圆圈中最后剩下的数字
Leecode 面试题62. 圆圈中最后剩下的数字
85 0