Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
202. 快乐数 - 力扣(LeetCode) (leetcode-cn.com)
编写一个算法来判断一个数 n
是不是快乐数。
「快乐数」 定义为:
- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
- 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
- 如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n
是 快乐数 就返回 true
;不是,则返回 false
。
示例 1:
输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
示例 2:
输入:n = 2
输出:false
提示:
- 1 <= n <= 2^31 - 1
二、思路分析:
快乐数的判断逻辑很简单,用while循环就可以计算出给定的数是快乐数,问题的难点在于如果给定的数字不是快乐数的话如何结束循环。 通过限制循环次数可以看出一些非快乐数的判断过程中都出现了重复的数字,由此可以猜想是计算过程中出现了重复导致了死循环,那么就通过判断计算过程中是否有重复数字出现的情况来结束循环并判定为非快乐数。
三、AC 代码:
/**
* @param {number} n
* @return {boolean}
*/
var isHappy = function(n) {
var str = n.toString(),result =false,list=[],isLoop=false;
while (!result && !isLoop) {
let count = 0;
for (let i = 0; i < str.length;i++){
count += Math.pow(parseInt(str[i]),2);
}
if(count==1){
result = true;
}
str = count.toString();
if(list.includes(str)){
isLoop = true;
}
list.push(str);
}
// console.log(list);
return result;
};
四、总结:
这种题考察的就是题意的理解。