LeetCode 202. Happy Number

解题思路:因为不知道如何去终止循环,所以看了一下讨论区的方法,一种是根据规律来终止循环,在维基百科上给出了一个"开心数字"的序列,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;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值