Write an algorithm to determine if a number n is happy.
A happy number is a number defined by the following process:
Starting with any positive integer, replace the number by the sum of the squares of its digits.
Repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1.
Those numbers for which this process ends in 1 are happy.
Return true if n is a happy number, and false if not.
Input: n = 19
Output: true
Explanation:
Input: n = 2
Output: false
loops endlessly in a cycle which does not include 1.
class Solution
{
private:
bool checkOverp(int result)
{
if (cycle.find(result) != cycle.end()) // 값이 있다
{
return false;
}
else
{
cycle.insert(result); // 값이 없다
return true;
}
}
public:
set<int> cycle;
bool isHappy(int n)
{
// 123 ? 12...3 => 1...2 => 0..1 =>
long long result = 0;
long long mod = 0;
while (n > 0)
{
mod = n%10;
n /= 10;
result += mod * mod;
}
if (result == 1)
{
return true;
}
else
{
if(!checkOverp(result)){// 값이 있다
return false;
}
else{
return isHappy(result); // 값이 없다
}
}
}
};