ハッピーナンバーとは
「ハッピーナンバー(Happy Number)」とは、以下の条件を満たす正の整数のことです:
任意の正の整数から始める。
その数字の各桁の平方の和を計算して置き換える。
この操作を繰り返す。
最終的に 1 に到達すれば Happy Number、そうでなければループに入って 非ハッピー。
アルゴリズムの考え方
数字を平方和に変換し続ける
既に出てきた数字 が再度出てきた場合はループなので false
最終的に 1 に到達したら true
import java.util.HashSet;
import java.util.Set;
class Solution {
public boolean isHappy(int n) {
Set<Integer> seen = new HashSet<>();
while (n != 1) {
if (seen.contains(n)) return false; // ループ検出
seen.add(n);
int sum = 0;
while (n > 0) {
int digit = n % 10;
sum += digit * digit;
n /= 10;
}
n = sum; // 次の数字に置き換え
}
return true; // 1に到達 → Happy Number
}
}
コード解説
HashSet seen
すでに出てきた数字を記録
重複チェックによってループを検出
while (n != 1)
数字が1になるまで繰り返す
sum += digit * digit
各桁の平方を足す
if (seen.contains(n)) return false
ループに入った場合は false
return true
1に到達したら Happy Number