1. 程式人生 > 其它 >202. 快樂數(LeetCode)

202. 快樂數(LeetCode)

題目描述


編寫一個演算法來判斷一個數 n 是不是快樂數。

「快樂數」定義為:

對於一個正整數,每一次將該數替換為它每個位置上的數字的平方和。
然後重複這個過程直到這個數變為 1,也可能是 無限迴圈 但始終變不到 1。
如果 可以變為 1,那麼這個數就是快樂數。
如果 n 是快樂數就返回 true ;不是,則返回 false 。

示例 1:

輸入:19

輸出:true

解釋:

1^2 + 9^2 = 82

8^2 + 2^2 = 68

6^2 + 8^2 = 100

1^2 + 0^2 + 0^2 = 1

提示:

1 <= n <= 2^31 - 1

條件分析


  1. 只要結果不為1,且出現了無限迴圈則代表不符合條件;

解題思路(查詢表)


  1. 可以定義一個set用來儲存之前已經出現的結果;
  2. 如果結果不為1,且出現重複,返回false,否則一直迴圈下去;

編碼如下

public boolean isHappy(int n) {
    if (n == 1) {
        return true;
    }
    Set<Integer> happendedNum = new HashSet<>();
    while (true) {
        if (happendedNum.contains(n)) {
            return false;
        } else {
            happendedNum.add(n);
        }
        n = newN(n);
        if (n == 1) {
            return true;
        }
    }
}

private int newN(int n) {
    int result = 0;
    int mod = 0;
    while(n != 0) {
        mod = n % 10;
        result += mod * mod;
        n = n / 10;
    }
    return result;
}