202 Happy Number My Submissions Question Editorial Solution Total Accepted: 73442 Total Submissions: 198117 Difficulty: Easy

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 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1

Credits: Special thanks to @mithmatt and @ts for adding this problem and creating all test cases.

Hide Company Tags Uber Airbnb Twitter Hide Tags Hash Table Math Hide Similar Problems (E) Add Digits (E) Ugly Number

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import java.util.*;

public class Solution {
    public boolean isHappy(int n) {
        // https://leetcode.com/discuss/33349/o-1-space-java-solution
		// There is some "detecting a circle in a linkedlist" flavor in this solution. Nice!
		// 1, 19 true,  others are false 
		// e.g 27 -53- 34-25-29-85-[89]-145 -42-20-4-16-37-58-[89]
	    int x = n;
	    int y = n;
	    
	    while (true) {
	        x = cal(x);
	        if (x == 1) return true;
	        
	        y = cal(cal(y));
	        if (y == 1) return true;
	        
	        if (x == y) return false;
	    }
    }
    
    public int cal(int n) {
        int x = n;
        int result = 0;
        
        while (x > 0) {
            result += (x % 10) * (x % 10);
            x = x / 10;
        }
        return result;
    }
}