題目描述:
編寫一個算法來判斷一個數是不是“快樂數”。
一個“快樂數”定義為:對于一個正整數,每一次将該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是無限循環但始終變不到 1。如果可以變為 1,那麼這個數就是快樂數。
示例:
輸入: 19
輸出: true
解釋:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
AC C++ Solution:
class Solution {
public:
bool isHappy(int n) {
if(n == 0) return 0;
set<int> s; //用一個set存儲每次平方之後的數字
int sum = 0;
while(1)
{
int tmp = n;
sum = 0;
while(tmp > 0)
{
int a = tmp%10;
sum += a*a;
tmp = tmp /10;
}
auto itr = s.find(sum);
if(itr != s.end()) break; //當在set中查找到相同的數字時,退出循環
s.insert(sum);
n =sum; //n設定為本次sum的值,作為下一次循環的初始值
}
if(sum ==1) return 1;
return 0;
}
};