LeetCode202.快乐数

134 阅读1分钟

「这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

LeetCode202.快乐数

题目要求

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。

  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。

  • 如果 可以变为 1,那么这个数就是快乐数。

如果 n 是快乐数就返回 true ;不是,则返回 false

示例1
输入:n = 19
输出:true
解释:12 + 92 = 8282 + 22 = 6862 + 82 = 10012 + 02 + 02 = 1
示例2
输入:n = 2
输出:false
思路
1.创建一个set对象,传过来的n是数字类型的我们转成字符串,声明一个变量为每次计算之后的值
let set = new Set();
let num = n + '';
let sum = 0;
2.做while循环,当sum一直等与1的时候也就证明它是一个快乐数,反之则不是
while (sum != 1) {  
    ...
}
return true;
3. 循环num,每次求出来sum的值在set里面查找一下是否有重复的,如果有的话就证明不是快乐数,否则就把这个sum转成字符串,然后add进入set里面
while (sum != 1) {  
    sum = 0;  
    for (let i=0; i<num.length; i++) {    
        sum = num[i] * num[i];  
    }  
    if (set.has(sum)) return false;  
    num = sum + '';  
    set.add(sum);
}
return true;

完整代码

var isHappy = function(n) {    
    let set = new Set();    
    let num = n + '';    
    let sum = 0;    
    while (sum != 1) {        
        sum = 0;        
        for (let i=0; i<num.length; i++) {            
            sum += num[i] * num[i];        
        }        
        if (set.has(sum)) return false;        
        num = sum + '';        
        set.add(sum);    
    }    
    return true;
};