快乐数-LintCode

来源:互联网 发布:优化 人才发展环境 编辑:程序博客网 时间:2024/06/04 20:06

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

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

样例:
19 就是一个快乐数。

1^2 + 9^2 = 828^2 + 2^2 = 686^2 + 8^2 = 1001^2 + 0^2 + 0^2 = 1

思路:
将不满足条件的数存入map中,若出现循环(map中存在当前数),则返回false;
如果当前数为1,返回true;

#ifndef C488_H#define C488_H#include<iostream>#include<map>using namespace std;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;        map<int, int> m;        return isHappyRecur(n, m);    }    bool isHappyRecur(int n, map<int, int> &m)    {        if (m.find(n) != m.end())            return false;        m[n] = 1;        int num = 0;        while (n != 0)        {            int rem = n % 10;            n = n / 10;            num += rem*rem;        }        if (num == 1)            return true;        else        {            return isHappyRecur(num,m);        }    }};#endif
原创粉丝点击