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.
Example:
Input: 19
Output: true
Explanation:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
Python
#Hash set
class Solution(object):
def isHappy(self, n):
def get_next(n):
total_sum = 0
while n > 0:
n, digit = divmod(n, 10) # n是商, digit是余数
total_sum += digit ** 2
return total_sum
seen = set()
while n != 1 and n not in seen:
seen.add(n)
n = get_next(n)
return n == 1
Java
//Hash Set O(n*logn)
class Solution{
public int BitSum(int x) {
int sum = 0, cur;
while(x > 0) {
cur = x % 10;
sum += cur*cur;
x = x / 10;
}
return sum;
}
public boolean isHappy(int n) {
Set<Integer>seen = new HashSet<Integer>();
seen.add(n);
while(n != 1) {
n = BitSum(n);
if(seen.add(n) == false) {
return false;
}
}
return true;
}
}
C++
//Hash_Set O(nlogn)
class Solution {
public:
int bitsum(int n){
int total_sum = 0, cur;
while (n > 0){
cur = n % 10;
total_sum += cur * cur;
n = n / 10;
}
return total_sum;
}
bool isHappy(int n) {
set<int> HashSet;
while(n != 1){
n = bitsum(n);
if(HashSet.find(n) == HashSet.end()){//没找到
HashSet.insert(n);
}else{//找到了,进入死循环
return false;
}
}
return true;
}
};