【LeetCode】 快乐数_202

97 阅读1分钟

原题:快乐数

image.png 我的理解: 题目中说会出现无限循环,出现无线循环就是不是快乐数了,这时可以使用哈希表来记录是否出现过。 难点可能在于对每个各位数的计算sum值。

 * @lc app=leetcode.cn id=202 lang=javascript
 *
 * [202] 快乐数
 */


// @lc code=start
/**
 * @param {number} n
 * @return {boolean}
 */
var isHappy = function(n) {
    //定义一个set,用于保存sum
    let s = new Set();
    //定义一个函数,用来计算每个数的判断结果
    var getSum  = function(n) {
        let sum = 0;
        while(n){
            sum += (n % 10) ** 2;
            n = Math.floor(n/10); 
        }
        return sum;     
    }
    //循环,一直判断
    while(1) {
        //判断n的sum值是否为1,如果为1则说明是快乐数,否则继续,一直找到重复的sum值才能说明不是快乐数
        if(getSum(n)===1) return true;
        n = getSum(n);
        if(s.has(n)) return false;
        s.add(n) 
    }
`};`