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)