Skip to content

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.

Constraints:

  • 1 <= n <= 2**31 - 1

Example 1:

**Input:** n = 19
**Output:** true
**Explanation:**
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

Solve


Loop until n == 1. No cycle found return True
If we found a cycle, return False

We can stored visited node into a hash map to check cycle

class Solution:
    def isHappy(self, n: int) -> bool:
        visited = set()
        while n != 1:
            if n in visited:
                return False
            visited.add(n)
            m = 0
            tmp = n
            while tmp:
                m += (tmp % 10) ** 2
                tmp = tmp // 10
            n = m
        return True

Last update : October 13, 2023
Created : August 16, 2023