「这是我参与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;
};