# LeetCode: Happy Number Solution

*Use a Set to detect cycle*

## Approach

*Cycle* here means a number is processed for the second time

## Implementation

1var isHappy = function (n) {2 const set = new Set()34 while (true) {5 if (n === 1) break6 if (set.has(n)) return false7 set.add(n)89 let sum = 010 while (n) {11 const lastDigit = n % 1012 sum += lastDigit * lastDigit13 n = Math.floor(n / 10)14 }15 n = sum16 }17 return true18}

## Implementation (shorter)

Don't want to waste time on social media?

1var isHappy = function (n) {2 const set = new Set()34 while (!set.has(n)) {5 set.add(n)6 n = String(n)7 .split("")8 .reduce((acc, digit) => acc + digit * digit, 0)9 }1011 return n === 112}

## References

## Similar problems

Sum of Digits of String After Convert

Minimum Addition to Make Integer Beautiful

## Comments

Loading comments...

## Tags

leetcode

hash table

math

## Apply and earn a $2,500 bonus once you're hired on your first job!

Clients from the Fortune 500 to Silicon Valley startups

Choose your own rate, get paid on time

From hourly, part-time, to full-time positions

Flexible remote working environment

A lot of open JavaScript jobs!!

**Fact corner:** Referred talent are 5x more likely to pass the Toptal screening process than the average applicant.

**Still hesitate?** Read HoningJS author's guide on dealing with Toptal interview process.