如果不仔细看题目,就会觉得这题的样例会进入死循环,然后导致程序超时。
然而这题主要是要理解题目的意思,重点在无限循环
,也就是说求和的值会重复出现,如果我们要快速判断一个元素是否出现集合里的时候,首先就要想到哈希表查询
。
取整:
js中/与c和cpp不同,不会自动取整,一般取整方法如下:
n=Math.floor(n); //取整,返回一个小于n的最大整数。
JavaScript Map用法:
Map.set(key,value )
: 可以给哈希表填充一个键值对Map.get( key)
: 返回某个 Map 对象中的一个指定key的元素,也就是说可以获取到某个元素方便进行后续处理。Map.has( key)
: 返回一个 bool 值,用来表明 map 中是否存在指定元素Map.delete( key)
:移除 Map 对象中指定的元素。JavaScript Set用法:
和map有区别,set对象是只有value作为参数。
Set.add(value)
:给set对象末尾添加一个值Set.has(value)
:返回一个 bool 值,判断set对象内是否已经存入该值
Map方法:
/**
* @param {number} n
* @return {boolean}
*/
var isHappy = function(n) {
let map = new Map();
getSum =function (n){
let sum = 0;
while(n){
sum+=(n%10)**2;
n=Math.floor(n / 10); //取整
}
return sum;
}
while(1){
n = getSum(n);
if(map.has(n))
return false;
if(n==1)
return true;
map.set(n,1);
}
};
Set方法:
/**
* @param {number} n
* @return {boolean}
*/
var isHappy = function(n) {
let set = new Set();
getSum =function (n){
let sum = 0;
while(n){
sum+=(n%10)**2;
n=Math.floor(n / 10); //取整
}
return sum;
}
while(1){
n = getSum(n);
if(set.has(n))
return false;
if(n==1)
return true;
set.add(n);
}
};