# 原题
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 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}