1 快乐树

image.png

  1. /**
  2. * @param {number} n
  3. * @return {boolean}
  4. */
  5. var isHappy = function(n) {
  6. const stack = []
  7. while(true) {
  8. const roundA = String(n).split('').map(t=>Number(t))
  9. .reduce((a,b)=>a+b*b,0)
  10. if(roundA === 1) return true
  11. if(stack.includes(roundA)) return false
  12. stack.push(roundA)
  13. n = roundA
  14. }
  15. }

roundA = String(n).split('').map(t=>Number(t)).reduce((a,b)=>a+b*b,0)
接收数值 转换字符串 在转换为数组 在通过map 求数的每个位的平方 相加

  1. function getN(n) {
  2. if(n == 1||n==0) return n;
  3. let res = 0;
  4. while(n){
  5. res += (n%10)*(n%10);
  6. n = parseInt(n/10);
  7. }
  8. return res;
  9. }
  10. var isHappy = function(n){
  11. const sumSet = new Set();
  12. while(n !=1 && !sumSet.has(n)){
  13. sumSet.add(n);
  14. n = getN(n)
  15. }
  16. return n==1
  17. }
  18. // 快慢指针 快 的到了1 就说明是true 否则就是会循环 把慢点给等到 然后输出 false
  19. var isHappy = function(n){
  20. if(getN(n) == 1) return true
  21. let a = getN(n),b = getN(getN(n));
  22. while(a!==b&&a!=1&&b!=1){
  23. a = getN(a),b = getN(getN(b))
  24. }
  25. return a===1||b===1
  26. }

易错点:函数忘记传参数 括号问题