classSolution { publicbooleanisHappy(int n) { Set<Integer> exist = newHashSet<>(); while (n > 1) { if (exist.contains(n)) { returnfalse; } exist.add(n); n = Square(n); } return n == 1; }
privateintSquare(int n) { intres=0; while (n > 0) { res += (n % 10) * (n % 10); n /= 10; } return res; } }
思路
使用一个 Set,如果 Set 已经包含了当前元素,说明发生循环了。就返回 false。
解答2[Java]:神奇的解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14
classSolution { publicbooleanisHappy(int n) { int d; while (n > 9) { d = n; n = 0; while (d > 0) { n += Math.pow(d % 10, 2); d = d / 10; } } return n == 1 || n == 7; } }
思路
这个是 1ms 的 sample submission。
最后使用了一个 1 和 7 来进行判断是因为如果是 Happy Number 就一定会经过 7 吗?不知道这背后的数学规律。