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个,笑了