# 原题

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

一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。

示例: 

输入: 19
输出: true
解释: 
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

# 解 :

var isHappy = function (n) {
    let set = new Set(),
        sum
    n += ''
    while (sum != 1) {
        sum = 0
        for (let i = 0; i < n.length; i++) { //类型转换,字符串相乘转换为数字 如:'2'*'2'=4
            sum += n[i] * n[i]
        }
        n = sum + ''
        if (set.has(sum)) {
            //set 里已有,则会重蹈覆辙,sum 不会等于1
            return false
        } else {
            //没有则添加
            set.add(sum)
        }
    }
    return true
};

set :

Set 对象允许你存储任何类型的唯一值,无论是原始值 (opens new window)或者是对象引用。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。

如:

const set1 = new Set([1, 2, 3, 4, 5]);
console.log(set1)//Set(5) {1, 2, 3, 4, 5}
Last Updated: 4/3/2020, 6:21:54 PM