> [!META]- Inline Metadata
> [tags:: #career]
> [project group:: Neetcode 150]
> [difficulty:: done]
> [status:: to begin]
> [link:: https://leetcode.com/problems/happy-number/]
> [up:: [[Leetcode MOC]]]
## Problem
Write an algorithm to determine if a number `n` 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.
- 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.
Return `true` _if_ `n` _is a happy number, and_ `false` _if not_.
**Example 1:**
**Input:** n = 19
**Output:** true
**Explanation:**
$1^2 + 9^2 = 82$
$8^2 + 2^2 = 68$
$6^2 + 8^2 = 100$
$1^2 + 0^2 + 0^2 = 1$
**Example 2:**
**Input:** n = 2
**Output:** false
**Constraints:**
- `1 <= n <= 231 - 1`
## Solution
### Mine
#### Python
```python
class Solution:
def isHappy(self, n: int) -> bool:
result_dict = {}
result = 0
while result != 1:
result = sum([int(a) ** 2 for a in str(n)])
if result_dict.get(result):
return False
result_dict[result] = 1
n = result
return True
```
Set could also be used - lookups are equally fast and you don't have to add a value
### Neetcode
## Things I Learned
## Scratchpad
The loop endlessly in a cycle means that the numbers will happen again. So before watching the rest of the Neetcode video, I'm just going to put each result in a dictionary, and check for a seen number. If I get a hit, return False. Eventually I'll get to 1 or a hit.