码迷,mamicode.com
首页 > 其他好文 > 详细

488 快乐数

时间:2018-06-27 15:00:31      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:problem   博客   str   出现   存在   无限循环   .net   ade   sum   

原题网址:https://www.lintcode.com/problem/happy-number/description

描述

写一个算法来判断一个数是不是"快乐数"。

一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。

您在真实的面试中是否遇到过这个题?  

样例

19 就是一个快乐数。

1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

标签
哈希表
数学
 
 
思路1:有个规律,非快乐数在循环计算各个位平方和时会出现4。  转自此博客
所以我们可以循环计算各个数位的平方和,直到出现1或者4。循环退出后判断下是1还是4就可以了。
 
AC代码:
class Solution {
public:
    /**
     * @param n: An integer
     * @return: true if this is a happy number or false
     */
    bool isHappy(int n) {
        // write your code here
    if (n<=0)
    {
        return false;
    }

    while(n!=1&&n!=4)
    {
        int sum=0;
        while(n)
        {
            sum=sum+(n%10)*(n%10);
            n=n/10;
        }
        n=sum;
    }
    return n==1;
    
    }
};

 

思路2:和思路1类似,只不过4换成了89。
首先说明一个真命题:任意一个正整数数运用题目中的算法都会循环到1或者89,若循环到1那就是快乐数,若循环到89,就是非快乐数,且循环到这两个数的时候都会陷入死循环。所以这个题只需要判断题目中的算法最后将给的数循环到了1还是89即可。   转自此文
 
 
思路3:参考 此博客 第一种解法,用哈希表保存每次循环的平方和,如果不是快乐数,会出现非1的重复数,判断数组里是否已经存在这样的数即可。
 

488 快乐数

标签:problem   博客   str   出现   存在   无限循环   .net   ade   sum   

原文地址:https://www.cnblogs.com/Tang-tangt/p/9233837.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!