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