202. 快樂數(LeetCode)
阿新 • • 發佈:2021-07-14
題目描述
編寫一個演算法來判斷一個數 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,且出現了無限迴圈則代表不符合條件;
解題思路(查詢表)
- 可以定義一個set用來儲存之前已經出現的結果;
- 如果結果不為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; }