力扣202题

本文介绍了一个判断正整数是否为快乐数的C语言算法,利用哈希表跟踪计算过程中每个数字的平方和,确保不重复。数组大小选择考虑了最大可能的计算结果,最终确定为820。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.题目要求

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

2.代码(C语言版)

int getSum(int n){
    int sum=0;
    while(n){
        sum+=(n%10)*(n%10);//个位数相乘
        n/=10;//n除以10
    }
    return sum;
}
bool isHappy(int n) {
    int sum=getSum(n);
    int hash[802]={0};
    while(sum!=1){
        if(hash[sum]==1){//计算值sum反复出现
        //使用数组作为哈希表用来存放每次计算的结果,初始数组都为 0,每次计算后将结果作为下标映射到数组元素。若对应数组元素为 0,说明此结果没得到过,将其改为 1;若为 1,说明计算结果已经重复,return false。
            return false;
        }else{
            hash[sum]++;
        }
        sum=getSum(sum);
    }
    return true;
}

那么数组的大小怎么确定呢?题目中告诉了 n 的大小最大不超过 2^31-1,即最大不超过 10 位数,也就是说,计算的结果最大不超过 9^2*10 也就是 810,再稍微大一点就行了,所以是820,这也是为什么本题能用数组的原因

作者:TaiSui
链接:https://leetcode.cn/problems/happy-number/solutions/2086749/202-kuai-le-shu-ha-xi-biao-by-taisui-5wnf/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值