LintCode_488_快乐数

来源:互联网 发布:电影心动的感觉 知乎 编辑:程序博客网 时间:2024/05/16 06:45

问题描述

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

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

求解

class Solution {public:    /*     * @param n: An integer     * @return: true if this is a happy number or false     */    bool isHappy(int n) {        unordered_set<int> visited;        auto nextNumber = [](int num) -> int {            int sum = 0;            while(num) {                int rem = num % 10;                sum += rem * rem;                num /= 10;            }            return sum;        };        while(n != 1 && !visited.count(n)) {            visited.emplace(n);            n = nextNumber(n);        }        return n == 1;    }};
原创粉丝点击