編寫一個(gè)算法來判斷一個(gè)數(shù) n 是不是快樂數(shù)。
「快樂數(shù)」定義為:對(duì)于一個(gè)正整數(shù),每一次將該數(shù)替換為它每個(gè)位置上的數(shù)字的平方和,然后重復(fù)這個(gè)過程直到這個(gè)數(shù)變?yōu)?1,也可能是 無限循環(huán) 但始終變不到 1。如果 可以變?yōu)? 1,那么這個(gè)數(shù)就是快樂數(shù)。
如果 n 是快樂數(shù)就返回 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
解題思路
解決一個(gè)問題:如何判斷是否會(huì)無限循環(huán)
可以借助之前寫過的判斷鏈表是否有環(huán),這里將節(jié)點(diǎn)換成數(shù)字罷了
仍然是快慢指針,一個(gè)一次"走一格",另一個(gè)一次"走兩格",如果相遇時(shí)不為1則說明有死循環(huán)
代碼
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) { // 存在閉環(huán)則跳出
if (slow == 1 || quick == 1) {
return true;
}
slow = getNext(slow);
quick = getNext(getNext(quick));
}
return slow == 1;
}
}