Happy Number算法submit了好幾次,才最終測試通過,總結一下。
1. Happy Number定義
給定一個整數,將每一位數字的平方加起來,得出來一個和,繼續將這個和的每一位數字的平方加起來,不斷循環,如果最終的和是1的話,那麼該整數即爲Happy Number.
舉例:
Input: 19
Output: true
Explanation:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
2. 算法基本思想
1)取餘運算得到最後一位數
2)求取平方,累加
3)除法運算得到十位靠左的所有數
4)如果這個除法結果爲0,那麼運算完成,開始對結果進行循環1 -3 的運算
基本的思想就可以完成了,但是有一個地方需要注意的是,如果給定的數字是2,那麼處理結果是這樣的:
2,4,16,37,58,89,145,42,20,4,16,37.......
這樣就進入了死循環了,需要做處理。
3. 參考代碼
下面是我的參考算法代碼:
class Solution {
public:
bool isHappy(int n) {
int result = 0;
int temp = n;
vector<int> resultVect;
int numbersResult = 0;
if (n < 0 || n > numeric_limits<int>::max()) return false;
while (temp) {
result += pow(temp%10, 2);
temp = temp/10;
if (temp == 0) {
// check for loops endlessly
resultVect.push_back(result);
numbersResult = 0;
for (auto & x : resultVect) {
if (x == result) numbersResult++;
if (numbersResult == 2) return false;
}
if (result == 1) return true;
temp = result;
result = 0;
}
}
return false;
}
};