import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param n int整型
* @return bool布尔型
*/
public boolean happynum (int n) {
// write code here
String string=""+n;
TreeSet<Integer> set=new TreeSet<>();
while(true) {
int sum=0;
for (int i = 0; i < string.length(); i++) {
int x=string.charAt(i)-'0';
sum+=x*x;
}
if(!set.add(sum)) {
return false;
}
string=""+sum;
if(sum==1) {
return true;
}
}
}
}
这道题其实不难,就两种情况,要么满足条件,是快乐数,要么无限循环,不是快乐数,而为什么会无限循环呢,其实是因为出现了之前出现过的数字,从而无限循环,这个时候,用TreeSet可以很好地解决该问题,一旦出现之前有过的数,就会添加失败,从而直接return false。当然这道题的测试数据有点弱,我一开始没想到正确的解法,直接暴力,说如果sum大于100,就返回false,结果10个能过9个,笑了



京公网安备 11010502036488号