202.Happy Number
Tags: [math], [simulation], [digit], [set]
Com: {t}
Hard: [##]
Link: https://leetcode.com/problems/happy-number/#/description
Write an algorithm to determine if a number 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.
Example: 19 is a happy number
Solution: Simulation, Set
public class Solution {
public boolean isHappy(int n) {
if (n <= 0) {
return false;
}
Set<Integer> set = new HashSet<>();
while (!set.contains(n)) {
set.add(n);
if (n == 1) {
return true;
}
int sum = 0;
while (n > 0) {
sum += (int)Math.pow((n % 10), 2);
n /= 10;
}
n = sum;
}
return false;
}
}
Revelation:
- Use set to check whether there is an endless partner. There is another way to detect the cycle, by using slow and fast, reference: https://discuss.leetcode.com/topic/12587/my-solution-in-c-o-1-space-and-no-magic-math-property-involved
- In Java, Math.pow(..., ...) return double type.
Note:
- Time complexity depends on the input.