1 快乐树
/**
* @param {number} n
* @return {boolean}
*/
var isHappy = function(n) {
const stack = []
while(true) {
const roundA = String(n).split('').map(t=>Number(t))
.reduce((a,b)=>a+b*b,0)
if(roundA === 1) return true
if(stack.includes(roundA)) return false
stack.push(roundA)
n = roundA
}
}
roundA = String(n).split('').map(t=>Number(t)).reduce((a,b)=>a+b*b,0)
接收数值 转换字符串 在转换为数组 在通过map 求数的每个位的平方 相加
function getN(n) {
if(n == 1||n==0) return n;
let res = 0;
while(n){
res += (n%10)*(n%10);
n = parseInt(n/10);
}
return res;
}
var isHappy = function(n){
const sumSet = new Set();
while(n !=1 && !sumSet.has(n)){
sumSet.add(n);
n = getN(n)
}
return n==1
}
// 快慢指针 快 的到了1 就说明是true 否则就是会循环 把慢点给等到 然后输出 false
var isHappy = function(n){
if(getN(n) == 1) return true
let a = getN(n),b = getN(getN(n));
while(a!==b&&a!=1&&b!=1){
a = getN(a),b = getN(getN(b))
}
return a===1||b===1
}
易错点:函数忘记传参数 括号问题