編寫一個算法來判斷一個數 n 是不是快樂數。
「快樂數」定義為:對于一個正整數,每一次將該數替換為它每個位置上的數字的平方和,然后重復這個過程直到這個數變為 1,也可能是 無限循環 但始終變不到 1。如果 可以變為 1,那么這個數就是快樂數。
如果 n 是快樂數就返回 True ;不是,則返回 False 。
示例:
輸入:19
輸出:true
解釋:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/happy-number
解題思路
解決一個問題:如何判斷是否會無限循環
可以借助之前寫過的判斷鏈表是否有環,這里將節點換成數字罷了
仍然是快慢指針,一個一次"走一格",另一個一次"走兩格",如果相遇時不為1
則說明有死循環
代碼
class Solution {
private int getNext(int n) {
int result = 0;
while (n != 0) {
result += Math.pow(n % 10, 2);
n /= 10;
}
return result;
}
public boolean isHappy(int n) {
int slow = n, quick = getNext(n);
while (slow != quick) { // 存在閉環則跳出
if (slow == 1 || quick == 1) {
return true;
}
slow = getNext(slow);
quick = getNext(getNext(quick));
}
return slow == 1;
}
}