美文网首页
202. Happy Number

202. Happy Number

作者: 默写年华Antifragile | 来源:发表于2020-04-02 23:44 被阅读0次

    https://leetcode.com/problems/happy-number/

    给定一个数字,每一次拿出这个数字 abc 的每一位执行 a^2 + b^2 + c^2 ,得到一个新的数,然后再把新的数进行逐位平方取和,如果最后面得到的值为1,那么这个数就是 happy number

    分析:

    对于一个数A,经过一系列上面的操作后,达到数字B,经过一系列操作,最后还会到数字B,即 A --> B --> B --> B,因此我们需要找到是否出现了循环

    • 这里采用快慢指针的方法,快的比慢的每次多跑2步,这样子快的会追上慢的,形成一个环;出现这种情况后再判断此时的值是否是1,如果是1就是快乐数
    • 也可以使用 hashset, 判断经过操作后的值是否之前出现了,由于hashset需要占据空间,因此这里不采用
    class Solution {
    public:
        bool isHappy(int n) {
            int n1 = n, n2 = next(n);
            while(n1!=n2 && n2 != n)
            {
                n1 = n2;
                n2 = next(n2);
            }
            if(n1==1)
                return true;
            else
                return false;
        }
        
    private:
        int next(int n)
        {
            int result=0, temp=0;
            while(n)
            {
                temp = n%10;
                result += temp*temp;
                n/=10;
            }
            return result;
        }
    };
    

    还有一种方法:对于非快乐数,最后面肯定会到达4(待证明),因此只要判断每次经过上述操作是否得到4

    class Solution {
    public:
        bool isHappy(int n) {
            int result=0;
            while(n!=1 && n!=4){
                int result=0;
                while(n)
                {
                    result += (n%10) * (n%10);
                    n/=10;
                }
                n = result;
            }
            return n==1;
        }
    };
    

    相关文章

      网友评论

          本文标题:202. Happy Number

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