Leetcode202快乐数(java实现)

今天分享的题目是快乐数:
Leetcode202快乐数(java实现)_第1张图片
快乐数的定义如下:
快乐数(Happy Number)是指一个正整数,将其替换为各个位上数字的平方和,重复这个过程直到最后得到的结果为1,或者无限循环但不包含1。如果最终结果为1,则该数为快乐数;如果最终结果不为1且进入了循环,则该数不是快乐数。
解题思路:快乐数的迭代过程是一个无环的过程,而不是快乐数则会出现环导致无限循环
eg:19-82-68-100-1;
2-4-16-37-58-89-145-42-20-4.

我们观察发现如果不是快乐数会出现重复的数字,因此我们根据这一点可以选择使用set集合进行题解。
下面结合代码进行思路的进一步讲解:

class Solution {
//用于计算每个数字的平方和并进行返回
    public int comsum(int x){
        int sum=0;
        int k=0;
        while(x>0){
            k=x%10;
            sum+=k*k;
            x=x/10;
        }
        return sum;
    }
    public boolean isHappy(int n) {
        Set<Integer> set1=new HashSet<>();
        //将n存入set1中,
        set1.add(n);
        while(n!=1){
        //n每次循环进行更新为它的平方和
            n=comsum(n);
            //如果set集合中出现的重复的,说明不是快乐数
        if(!set1.add(n)){
            return false;
        }
        }
        //n=1为快乐数
        return true;
   
	}
}

那么还有一个需要注意的点是:if(!set1.add(n)),这个判断条件的执行顺序,我们首先执行的是set.add(n),然后进行取反的操作。
小tips:set.add(n)的返回值说明:如果n在set集合中返回false,如果n不在这个集合中那么返回true。这一点也需要着重注意。
那么本道题的解题就到此结束了,创作不易希望给博主点个小爱心!xx

你可能感兴趣的:(java,开发语言,哈希算法,数据结构)