Thursday, July 30, 2015

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
这个题目很简单,但是要知道里面的逻辑, 把10进制的每一位取出来进行运算,如果在计算过程中重复出现了之前出现过的数,说明就是有循环出现,此时返回false,如果有结果计算出来为1,那么这个数就是happy number.

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

No comments:

Post a Comment