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