LeetCode202-快樂數
阿新 • • 發佈:2020-11-17
非商業,不侵權,LeetCode連結附上:
https://leetcode-cn.com/problems/happy-number/
進入正題。
題目:
編寫一個演算法來判斷一個數 n 是不是快樂數。
「快樂數」定義為:對於一個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是 無限迴圈 但始終變不到 1。如果 可以變為 1,那麼這個數就是快樂數。
如果 n 是快樂數就返回 True ;不是,則返回 False 。
示例:
輸入:19 輸出:true 解釋: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1
程式碼實現:
/** * 獲取當前數的平方和,即下一個數 */ private static int getNext(int n) { int temp = 0; while (n > 0) { temp += Math.pow(n % 10, 2); n = n / 10; } return temp; } /** * 兩種情況 * 1.n是一個快樂數,此時沒有迴圈,快跑者比慢跑著先到達數字1 * 2.n不是一個快樂數,最終快跑者和慢跑者將在同一個數字上相遇 * @param n * @return */ private static boolean isHappy(int n) { int slow = n; int fast = getNext(n); while (fast != 1 && slow != fast) { slow = getNext(slow); fast = getNext(getNext(fast)); } return fast == 1; } //時間複雜度O(logN), 空間複雜度O(1)
分析:
定義一個單獨方法,根據規則,用來確定當前數的下一個數;
快慢指標用於快速的判斷是否為快樂數,或非快樂數時,在迴圈的某個數字上相遇。