美文网首页
202. Happy Number

202. Happy Number

作者: jluemmmm | 来源:发表于2021-08-21 13:20 被阅读0次

编写一个算法判断一个数n是不是快乐数。

快乐数定义为:
对于一个正整数。每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,也可能是无线循环始终变不到1。

如果可以变为1,那么这个数就是快乐数。如果n是快乐数,就返回true,不是则返回false。

思路:用一个空间存储所得到的平方和,可能会出现三种情况

  • 平方和为1
  • 出现重复的数字,这个数不是
  • 数字会趋于无穷大
    如果出现重复的数字,则表示出现循环,这个数就不是。

对于第三种情况,对于3位的数字,不可能大于243,要么被困在243以内的循环内,要么跌倒11,4位或4位以上的数字在每一步都会丢失一位,然后降到 3 位为止。最坏的情况下,算法可能会再243以下的所有数字上循环,然后回到它已经经过的一个循环或者回到1,不会无限进行下去。

  • 时间复杂度 O(logN),空间复杂度O(1)
  • Runtime: 80 ms, faster than 71.27%
  • Memory Usage: 41 MB, less than 25.18%
/**
 * @param {number} n
 * @return {boolean}
 */
var isHappy = function(n) {
  let set = new Set();
  while (true) {
    let s = String(n);
    let cur = 0;
    for (let item of s) {
      cur += item * item;
    }
    if (cur === 1) {
      return true;
    }
    n = cur;
    if (set.has(n)) {
      return false;
    }
    set.add(n);
  }
};

相关文章

网友评论

      本文标题:202. Happy Number

      本文链接:https://www.haomeiwen.com/subject/ndegbltx.html