ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

202. Happy Number

2020-04-02 23:55:37  阅读:256  来源: 互联网

标签:10 202 return temp int Number result n2 Happy


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;
    }
};

标签:10,202,return,temp,int,Number,result,n2,Happy
来源: https://www.cnblogs.com/qiulinzhang/p/12623912.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有