zoukankan      html  css  js  c++  java
  • 202. Happy Number

    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;
        }
    };
    
  • 相关阅读:
    电脑命令大全
    iBatis简单入门教程
    Tomcat从内存、并发、缓存方面优化方法
    TreeMap 源码分析
    红黑树详细分析,看了都说好
    短链接原理
    容器的六大理解误区
    超能陆战队中的微型机器人现已实现!
    怎么理解微服务架构
    使用Golang时遇到的一些坑
  • 原文地址:https://www.cnblogs.com/qiulinzhang/p/12623912.html
Copyright © 2011-2022 走看看