LeetCode 202. Happy Number

来源:互联网 发布:学大福利知乎 编辑:程序博客网 时间:2024/06/06 14:26

解题思路:因为不知道如何去终止循环,所以看了一下讨论区的方法,一种是根据规律来终止循环,在维基百科上给出了一个"开心数字"的序列,1,7,...所以当发现n<7时,就可以终止循环了,一定不是"开心数字";第二种方法找上限,32位int类型的取值范围 min:-2147483648 max:2147483647,而根据"开心数字"的规则,最大的应该是每位都是9,这样最大才810,假设10位全是9,其实并没有那么大,所以可以开一个1000的数组,用来记录这个数组是否出现过,如果出现过说明进入死循环了,可以跳出来了.

class Solution {public:    bool isHappy(int n) {                int count = 0;        while(n > 6){            int res = 0;           while(n != 0){               res += (n%10)*(n%10);               n /= 10;           }           n = res;       }        return n == 1;    }};

class Solution {public:    int res(int n){        int ans = 0;        while(n){            ans += pow(n%10, 2);    n/=10;        }        return ans;    }    bool isHappy(int n) {        bool flag[1000];        memset(flag, 0, sizeof(flag));n = res(n);        while(!res[n]){    res[n] = true;            if(n == 1)                return true;       n = res(n);        }        return false;    }};


0 0
原创粉丝点击