Day 2 of 30-Day LeetCode Challenge
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, and 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 numbers.
Return True if n
is a happy number, and False if not.
class Solution {
public:
unsigned long long sumOfSquares(unsigned long long n){
unsigned long long result = 0;
while(n>0){
result += pow(n%10, 2);
n /= 10;
}
return result;
}
bool isHappy(int n) {
//Method 1) : Using Hash
// unordered_set<unsigned long long> s;
// unsigned long long num = n;
// while(s.find(num)==s.end()){
// s.insert(num);
// num = sumOfSquares(num);
// if(num==1) return true;
// }
// return false;
//Method 2) : Using Recursion
int slow = n;
int fast = n;
do{
slow = sumOfSquares(slow);
fast = sumOfSquares(sumOfSquares(fast));
}while(slow!=fast);
if(slow==1) return true;
else return false;
}
};