zoukankan      html  css  js  c++  java
  • codewars--js--Happy numbers++无穷大判断

    问题描述:

    A happy number is a number defined by the following process: starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1.

    Those numbers for which this process ends in 1 are happy numbers, while those that do not end in 1 are unhappy numbers (or sad numbers) (Wikipedia).

    For example number 7 is happy because after a number of steps the computed sequence ends up with a 1: 7, 49, 97, 130, 10, 1

    while 3 is not, and would give us an infinite sequence: 3, 9, 81, 65, 61, 37, 58, 89, 145, 42, 20, 4, 16,3 7, 58, 89, 145, 42, 20, 4, 16, 37, ...

    Write a function that takes n as parameter and return true if and only if n is an happy number.

    Happy coding!

    我的思路:

    当求得sum=1时结束循环(sum=当前数各个位的平方之和)。对于有的数不是happy数,这个while就得一直做下去,设置一个flag判断是都为无穷大数(Number.POSITIVE_INFINITY),若是,则直接返回false。但是这样仍然超时。

    我的答案:

    function isHappy(n) {
      // Good Luck
      var sum=0;
      var flag=1;
      while(sum!=1){
        var a=n.toString().split("");
        for(var i=0;i<a.length;i++){
          sum=sum+Math.pow((+a[i]),2);
        }
        n=sum;
        flag+=1;
        if(flag=="Infinity"){return false;}
      }
      return true;
    }

    优秀答案:

    (1)通过判断n是不是循环出现,跳出while循环

    function isHappy(n) {
      let arr = []
      while (n !== 1 && arr.indexOf(n) === -1) {
        arr.push(n);
        n = n.toString().split('').map(x => Math.pow(Number(x), 2)).reduce((p, n) => p + n, 0);
      }
      return n ==1?true:false;
    }

    哈哈哈!

  • 相关阅读:
    oracle内存粒度
    知乎--软件架构设计 性能系列
    VAMEI 图解的博客
    泰晓科技
    高性能高并发系统的稳定性保障
    如何提高Linux下块设备IO的整体性能?
    Unix操作系统LD_PRELOAD简介
    浅析keepalived vip漂移原理与VRRP协议
    SQL:将查询结果插入到另一个表的三种情况
    C# Graphics中有关绘图质量的几个Mode
  • 原文地址:https://www.cnblogs.com/hiluna/p/8916729.html
Copyright © 2011-2022 走看看