> [!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.