This is a practice question:
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
\$1^2 + 9^2 = 82\$
\$8^2 + 2^2 = 68\$
\$6^2 + 8^2 = 100\$
\$1^2 + 0^2 + 0^2 = 1\$
Program below solves this problem:
public static boolean isHappy(int n) {
int sum=0;
Set<Integer> seenSet = new HashSet<Integer>();
while (n > 0) {
int x = n%10;
sum+=x*x;
n=n/10;
if (n == 0 && sum != 1) {
n=sum;
sum=0;
seenSet.add(n);
} else if (n== 0 && sum == 1 ) {
return true;
}
else if (seenSet.contains(n)) {
return false;
}
}
return true;
}
I'm looking for any comments on how to improve the code, but a specific focus on whether the way the method returns from multiple places would be appreciated - the multiple return statements concern me.