hanCodeHub
3/13/2020 - 6:31 PM

Happy Numbers

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.

    public boolean isHappy(int n) {
        if (n == 0) return false;
        if (n == 1) return true;
        
        HashSet<Integer> set = new HashSet<>();
        int total = 0;
        
        while (n != 1) {
            // chop digits and add to total
            while (n >= 1) {
                total += Math.pow(n % 10, 2);
                n /= 10;
            }

            // if cycling back to same num
            if (set.contains(total)) {
                return false;
            }
            set.add(total);
            
            // repeat next num with total
            n = total;
            total = 0;
        }
        
        // num reaches 1
        return true;
    }