Using Hashmap
Store all the numbers , and check for repeated number
if repetition occurs then its not a happy number
Javascript Code
/**
* @param {number} n
* @return {boolean}
*/
var isHappy = function (n) {
const myMap = new Map();
// The loop continues until we see a repeated number.
while (!myMap.has(n)) {
myMap.set(n);
n = String(n).split("").reduce((sum,num)=> sum + Number(num) ** 2 , 0 );
}
return n==1;
};
Using slow and fast pointers
Javascript Code
/**
* @param {number} n
* @return {boolean}
*/
const calculateSum = (n) => {
let sum = 0;
while (n > 0) {
let digit = n % 10;
sum += digit * digit;
n = Math.floor(n / 10);
}
return sum
}
var isHappy = function (n) {
let slow = n;
let fast = calculateSum(fast); // ✅ Fast moves 1 step ahead before the loop
while (slow != fast) {
slow = calculateSum(slow);
fast = calculateSum(calculateSum(fast));// ✅ Moves 2 steps per loop
}
return slow === 1
};
this can be improved using do while loop since do while loop executes at least one time even if the condition fails
Javascript Code
/**
* @param {number} n
* @return {boolean}
*/
const calculateSum = (n) => {
let sum = 0;
while (n > 0) {
let digit = n % 10;
sum += digit * digit;
n = Math.floor(n / 10);
}
return sum
}
var isHappy = function (n) {
let slow = n;
let fast = n;
do {
slow = calculateSum(slow);
fast = calculateSum(calculateSum(fast));
} while (slow != fast)
return slow === 1
};
Top comments (0)