【LeetCode】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: 19 is a happy number

  • 12 + 92 = 82,
  • 82 + 22 = 68,
  • 62 + 82 = 100,
  • 12 + 02 + 02 = 1


思路:

若 n 为 1 ,则是 HappyNumber ,返回 true ;若不断循环,则不是 HappyNumber 。 所以关键在于如何判断是否进入循环。这里我采用的是将生成的新数存入 set 中,当 set 中已有这个数时,说明循环,返回 false 。


代码实现:

class Solution {
public:
    bool isHappy(int n) {
        unordered_set<int> aSet;
        
        while(n>0){
            if(n==1){
                return true;
            }
            if(aSet.count(n)){
                return false;
            }
            aSet.insert(n);
            int temp=n;
            int sum=0;
            int b;
            while(temp!=0){
                b=temp%10;
                sum+=b*b;
                temp/=10;
            }
            n=sum;
            sum=0;
        }
        return false;
    }
};


 
comments powered by Disqus