diff --git a/problems/0202.快乐数.md b/problems/0202.快乐数.md index 710c824d..02db507a 100644 --- a/problems/0202.快乐数.md +++ b/problems/0202.快乐数.md @@ -159,26 +159,28 @@ func getSum(n int) int { javaScript: ```js -function getN(n) { - if (n == 1 || n == 0) return n; - let res = 0; - while (n) { - res += (n % 10) * (n % 10); - n = parseInt(n / 10); +var isHappy = function (n) { + let m = new Map() + + const getSum = (num) => { + let sum = 0 + while (n) { + sum += (n % 10) ** 2 + n = Math.floor(n / 10) + } + return sum + } + + while (true) { + // n出现过,证明已陷入无限循环 + if (m.has(n)) return false + if (n === 1) return true + m.set(n, 1) + n = getSum(n) } - return res; } -var isHappy = function(n) { - const sumSet = new Set(); - while (n != 1 && !sumSet.has(n)) { - sumSet.add(n); - n = getN(n); - } - return n == 1; -}; - -// 使用环形链表的思想 说明出现闭环 退出循环 +// 方法二:使用环形链表的思想 说明出现闭环 退出循环 var isHappy = function(n) { if (getN(n) == 1) return true; let a = getN(n), b = getN(getN(n)); diff --git a/problems/数组理论基础.md b/problems/数组理论基础.md index 6d7b9f9a..146cd2de 100644 --- a/problems/数组理论基础.md +++ b/problems/数组理论基础.md @@ -88,7 +88,7 @@ int main() { **所以可以看出在C++中二维数组在地址空间上是连续的**。 -像Java是没有指针的,同时也不对程序员暴漏其元素的地址,寻址操作完全交给虚拟机。 +像Java是没有指针的,同时也不对程序员暴露其元素的地址,寻址操作完全交给虚拟机。 所以看不到每个元素的地址情况,这里我以Java为例,也做一个实验。