* Hash Set - seen dynamic
* Time O(log(N)) | Space O(log(N))
* https://leetcode.com/problems/happy-number/
* @param {number} n
* @return {boolean}
*/
var isHappy = (n, seen = new Set()) => {
const hasCycle = () => n === 1 || seen.has(n);
while (!hasCycle()) {
seen.add(n);
n = getNext(n);
}
return n === 1;
};
var getNext = (n, sum = 0) => {
while (0 < n) {
const remainder = n % 10;
n = Math.floor(n / 10);
sum += remainder * remainder;
}
return sum;
};
* Hash Set - seen static
* Time O(log(N)) | Space O(1)
* https://leetcode.com/problems/happy-number/
* @param {number} n
* @return {boolean}
*/
var isHappy = (n) => {
const cycles = [4, 16, 37, 58, 89, 145, 42, 20];
const seen = new Set(cycles);
const hasCycle = () => n === 1 || seen.has(n);
while (!hasCycle()) {
n = getNext(n);
}
return n === 1;
};
var getNext = (n, sum = 0) => {
while (0 < n) {
const remainder = n % 10;
n = Math.floor(n / 10);
sum += remainder * remainder;
}
return sum;
};
* Pointer - n === 1 || n === 4
* Time O(log(N)) | Space O(1)
* https://leetcode.com/problems/happy-number/
* @param {number} n
* @return {boolean}
*/
var isHappy = (n) => {
const hasCycle = () => n === 1 || n === 4;
while (!hasCycle()) {
n = getNext(n);
}
return n === 1;
};
var getNext = (n, sum = 0) => {
while (0 < n) {
const remainder = n % 10;
n = Math.floor(n / 10);
sum += remainder * remainder;
}
return sum;
};
* Slow Fast
* Time O(log(N)) | Space O(1)
* https://leetcode.com/problems/happy-number/
* @param {number} n
* @return {boolean}
*/
var isHappy = (n) => {
let [slow, fast] = [n, getNext(n)];
const hasCyle = () => fast === 1 || slow === fast;
while (!hasCyle()) {
slow = getNext(slow);
fast = getNext(getNext(fast));
}
return fast === 1;
};
var getNext = (n, sum = 0) => {
while (0 < n) {
const remainder = n % 10;
n = Math.floor(n / 10);
sum += remainder * remainder;
}
return sum;
};