今天分享的题目是快乐数:
快乐数的定义如下:
快乐数(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