← Hashing

Happy Number

Easy
Python
def is_happy(n):
    seen=set()
    while n!=1:
        if n in seen: return False
        seen.add(n)
        n=sum(int(d)**2 for d in str(n))
    return True
Java
public boolean isHappy(int n){
    Set<Integer> seen=new HashSet<>();
    while(n!=1){
        if(seen.contains(n)) return false;
        seen.add(n);
        int s=0;
        while(n>0){int d=n%10;s+=d*d;n/=10;}
        n=s;
    } return true;
}

Key Insight

Python generator sum vs Java math loop. str() for digit iteration.

Python → Java Differences

  • Generator sum vs nested loop
  • str() for digit iteration Python
  • in vs contains()
Python
def is_happy(n):
    seen=set()
    while n!=1:
        if n in seen: return False
        seen.add(n)
        n=sum(int(d)**2 for d in str(n))
    return True
Java
public boolean isHappy(int n){
    Set<Integer> seen=new HashSet<>();
    while(n!=1){
        if(seen.contains(n)) return false;
        seen.add(n);
        int s=0;
        while(n>0){int d=n%10;s+=d*d;n/=10;}
        n=s;
    } return true;
}

Algorithm Steps

1. Track seen numbers
2. Squared digit sum
3. Cycle: false 1: true