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;
    }
}


相关文章
|
7月前
|
算法
【算法专题突破】双指针 - 快乐数(3)
【算法专题突破】双指针 - 快乐数(3)
20 0
|
8月前
202. 快乐数
202. 快乐数
22 0
|
16天前
|
算法
[leetcode] 快乐数 E
[leetcode] 快乐数 E
|
4月前
|
算法 C++
快乐数(C++)
快乐数(C++)
25 0
|
4月前
|
存储 算法 Java
leetcode-202:快乐数
leetcode-202:快乐数
20 0
|
5月前
|
算法 Java C++
「LeetCode」202. 快乐数
「LeetCode」202. 快乐数
16 0
|
5月前
|
算法
每日一题:LeetCode-202.快乐数(一点都不快乐)
每日一题:LeetCode-202.快乐数(一点都不快乐)
|
算法 JavaScript 前端开发
日拱算法:双指针解快乐数,快乐就完事了~
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐数。
|
存储 算法
LeetCode:202. 快乐数
题目描述:编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
(数论)蓝桥杯AcWing 1205. 买不到的数目
(数论)蓝桥杯AcWing 1205. 买不到的数目
34 0