diff --git a/OJ notes/pages/Leetcode Happy-Number.md b/OJ notes/pages/Leetcode Happy-Number.md new file mode 100644 index 0000000..ce2e18f --- /dev/null +++ b/OJ notes/pages/Leetcode Happy-Number.md @@ -0,0 +1,102 @@ +# Leetcode Happy-Number + +#### 2022-07-26 09:12 + +> ##### Algorithms: +> #algorithm #Floyd_s_cycle_finding_algorithm +> ##### Difficulty: +> #coding_problem #difficulty-easy +> ##### Additional tags: +> #leetcode +> ##### Revisions: +> N/A + +##### Related topics: +```expander +tag:#Floyd_s_cycle_finding_algorithm +``` + + + +##### Links: +- [Link to problem](https://leetcode.com/problems/happy-number/) +___ +### 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_. + +#### Examples + +**Example 1:** + +**Input:** n = 19 +**Output:** true +**Explanation:** +12 + 92 = 82 +82 + 22 = 68 +62 + 82 = 100 +12 + 02 + 02 = 1 + +**Example 2:** + +**Input:** n = 2 +**Output:** false + +#### Constraints + +- `1 <= n <= 231 - 1` + +### Thoughts + +> [!summary] +> This is a #Floyd_s_cycle_finding_algorithm + +This works, because as the problem mentioned, this will result in a endless loop. + +So, by using fast ans slow, we can determine whether there is a loop. + +And, when fast hit 1, we know slow will eventually reach the +answer, so we return early. (but in the cost of time of checking). + +### Solution + +```cpp +class Solution { + int getDigitSqrt(int i) { + int sum = 0; + + while (i) { + sum += (i % 10) * (i % 10); + i /= 10; + } + + return sum; + } + +public: + bool isHappy(int n) { + // Floyd cycle finding algorighm. + int slow, fast; + slow = fast = n; + + do { + slow = getDigitSqrt(slow); + fast = getDigitSqrt(fast); + fast = getDigitSqrt(fast); + if (fast == 1) { + return true; + } + } while (fast != slow); + + return false; + } +}; +``` \ No newline at end of file diff --git a/OJ notes/pages/Untitled.md b/OJ notes/pages/Untitled.md deleted file mode 100644 index e69de29..0000000