美文网首页
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