LeetCode Happy Number

202. Happy Number

Write an algorithm to determine if a number is “happy”.

A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers.

Example: 

Input: 19
Output: true
Explanation: 
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

本题要判断一个数是否是Happy Number,过程是:不断对数的每个digit求平方和,如果平方和等于1,则是Happy Number;如果造成无限循环了,则不是Happy Number。 代码很简单,直接按题意做就是,使用set判断是否出现重复循环了。完整代码如下:

class Solution {
public:
    bool isHappy(int n)
    {
        set<int> nums;
        while (true) {
            if (nums.find(n) != nums.end())
                return false;
            nums.insert(n);
            int sum = 0;
            while (n != 0) {
                int q = n % 10;
                sum += q * q;
                n = n / 10;
            }
            if (sum == 1)
                return true;
            else
                n = sum;
        }
    }
};

本代码提交AC,用时4MS。

Leave a Reply

Your email address will not be published. Required fields are marked *