1. 编写一个算法来判断一个数 n 是不是快乐数。
    2. 「快乐数」定义为:
    3. 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
    4. 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1
    5. 如果 可以变为 1,那么这个数就是快乐数。
    6. 如果 n 是快乐数就返回 true ;不是,则返回 false

    这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。

    1. class Solution {
    2. public boolean isHappy(int n) {
    3. Set<Integer> record = new HashSet<>();
    4. while (n != 1 && !record.contains(n)) {
    5. record.add(n);
    6. n = getNextNumber(n);
    7. }
    8. return n == 1;
    9. }
    10. private int getNextNumber(int n) {
    11. int res = 0;
    12. while (n > 0) {
    13. int temp = n % 10;
    14. res += temp * temp;
    15. n = n / 10;
    16. }
    17. return res;
    18. }
    19. }