LeetCode202快乐数


思路:

第一个点就是求该数各位平方和,第二个就是考虑如何判断是否出现循环,即当前平方和是否曾经出现过,考虑用哈希表

第二步需要考虑哈希表的长度,题目中给出的n的范围可知,最长是32位,最大数是32位全1,那么平方和最大就是31位9,最大和是2511,所以可以设置数组长度为2512,用于记录平方和是否出现过,从而判断是否循环

c 复制代码
//SquareSum用于求该数平方和
int SquareSum(int a)
{
    int tmp=a;
    int sum=0;
    while(tmp!=0)
    {
        int k=tmp%10;
        sum+=k*k;
        tmp/=10;
    }
    return sum;
}
bool isHappy(int n) 
{
    //定义一个哈希表用于记录当前出现过的数
    int hash[2512]={0};
    while(n!=1)
    {
        int tmp=SquareSum(n);
        if(hash[tmp]==1) return false;
        if(hash[tmp]==0) hash[tmp]=1;
        n=tmp;
    }
    return true;
}
相关推荐
空白到白22 分钟前
机器学习-聚类
人工智能·算法·机器学习·聚类
索迪迈科技27 分钟前
java后端工程师进修ing(研一版 || day40)
java·开发语言·学习·算法
zzzsde41 分钟前
【数据结构】队列
数据结构·算法
芒克芒克1 小时前
LeetCode 面试经典 150 题:删除有序数组中的重复项(双指针思想解法详解)
算法
青 .1 小时前
数据结构---二叉搜索树的实现
c语言·网络·数据结构·算法·链表
MChine慕青2 小时前
顺序表与单链表:核心原理与实战应用
linux·c语言·开发语言·数据结构·c++·算法·链表
塔中妖2 小时前
【华为OD】查找接口成功率最优时间段
算法·链表·华为od
塔中妖2 小时前
【华为OD】最大子矩阵和
算法·华为od·矩阵
努力学习的小廉3 小时前
深入了解linux系统—— 线程同步
linux·服务器·数据库·算法
数据爬坡ing3 小时前
从挑西瓜到树回归:用生活智慧理解机器学习算法
数据结构·深度学习·算法·决策树·机器学习