lintcode-488-快乐数

488-快乐数

写一个算法来判断一个数是不是"快乐数"。
一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为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

标签

哈希表 数学

思路

使用 map 记录已经替换过的数,防止无限循环

code

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

        unordered_map<int, bool> isExisted;

        while (n != 1 && isExisted[n] != true) {
            isExisted[n] = true;
            int n2 = 0;
            while (n != 0) {
                n2 += (n % 10) * (n % 10);
                n = n / 10;
            }
            n = n2;
        }
        if (n == 1) {
            return true;
        }
        else {
            return false;
        }
    }
};
原文地址:https://www.cnblogs.com/libaoquan/p/7416649.html