Leetcode

Leetcode.202.Happy Number

2019-11-27  本文已影响0人  Jimmy木

题目

判断一个数是否happy, 如果一个数分解成各位数的平方和, 不断分解成平方和。如果最后等于1即为happy, 如果不等于1或者无限循环即不happy。

Input:19
Output: true
Explanation:  1² + 9² = 82
              8² + 2² = 68
              6² + 8²= 100
              1² + 0² + 0² = 1
Input:16
Output: false

思路

主要是要判断循环和整数越界的问题。如果最后分解的数循环的话,这些分解的数的平方和一定和之前的一个整数相等,所以用set来存储已经产生的数,来判断循环。

bool isHappy(int n) {
    unordered_set<int> m_set;
    int temp = n;
    int sum = 0;
    while (temp != 1) {
        while (temp != 0) {
            int x = temp % 10;
            sum += x * x;
            temp = temp / 10;
        }
        if (sum == 1){
            break;
        } else if (m_set.count(sum) > 0) {
            return false;
        } else {
            temp = sum;
            m_set.insert(sum);
            sum = 0;
        }
    }

    return true;
}

总结

转换思维,不要想着去判断分解出来的数组循环,比较两个数组相等太麻烦,本体比较特殊,直接比较平方和相等即可。

上一篇 下一篇

猜你喜欢

热点阅读