快慢指针--快乐数判断

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/happy-number

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

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



1、关键是跳出无限循环

2、快乐数判断有固定规律,不快乐数会陷入重复数的循环,且不包含1(如果是1就快乐了呀!)

3、判断跳出循环时是不是1 是1就快乐 不是1不快乐

4、快慢指针跳出无限循环,类似判断环形链表

class Solution {
    public boolean isHappy(int n) {
        int fast;
        int slow;
        fast=slow=n;
        do{
            slow = sum(slow);
            fast = sum(fast);
            fast = sum(fast);
        }while(fast!=slow);
        if(fast==1) return true;
        else return false;
    }

    int sum(int num)
    {
        int sum=0;
        while(num!=0)
        {
            sum+=(num%10)*(num%10);
            num = num/10;
        }
        return sum;
    }
}

 

posted on 2020-03-23 20:56  洛小侠  阅读(220)  评论(0编辑  收藏  举报

导航