zoukankan      html  css  js  c++  java
  • LeetCode202. 快乐数

    按照题目说的规则,不是快乐数的数,会陷入无限循环,永远得不到1,比如18,在第4次迭代的时候计算出来的n是58,在第12次迭代之后n的值还是58,所以就陷入了无限循环之中,所以18不是快乐数。

    因此,我们可以用一个set,对于每一次迭代就算出来的n,都先去判断set中是否已经存在这个值了,如果已经存在,说明计算陷入了循环,这个数就不是快乐数。

    具体做法:每次循环先把当前n的值加入集合中,方便之后判断循环,每一次计算n的下一次迭代得到的值newN,newN就是把n的所有位置的数的平方和相加得到的数,然后把newN的值再赋给n。
    只要n的值不为1(为1就可以返回true了),或者n的值在set中没有出现过,就继续循环。

    代码如下:

    class Solution {
    public:
        bool isHappy(int n) {
            set<int> hash;
            while(true) {
                hash.insert(n);
                int newN = 0;                        //newN是把n的每一位的数的平方和相加得到的数
                while(n != 0) {
                    newN += pow(n % 10, 2);
                    n /= 10;
                }
                n = newN;                           
                if(n == 1) {                        //退出循环有两种情况:(1)n为1(说明这是一个快乐数)
                    break;
                }
                if(hash.count(n) != 0) {            //(2)之前的计算中已经出现了现在这个数,说明陷入了无限循环,这不是一个快乐数
                    return false;
                }
            }
            return true;
        }
    };
    
  • 相关阅读:
    msp430项目编程57
    msp430项目编程56
    msp430项目编程55
    msp430项目编程54
    msp430项目编程53
    msp430项目编程52
    msp430项目编程51
    msp430项目编程50
    msp430项目编程47
    msp430项目编程46
  • 原文地址:https://www.cnblogs.com/linrj/p/13434788.html
Copyright © 2011-2022 走看看