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;
}
相关推荐
JeffersonZU1 小时前
【数据结构】1-4算法的空间复杂度
c语言·数据结构·算法
L_cl1 小时前
【Python 算法零基础 4.排序 ① 选择排序】
数据结构·算法·排序算法
山北雨夜漫步2 小时前
机器学习 Day18 Support Vector Machine ——最优美的机器学习算法
人工智能·算法·机器学习
拼好饭和她皆失3 小时前
算法加训之最短路 上(dijkstra算法)
算法
瓦力wow5 小时前
c语言 写一个五子棋
c语言·c++·算法
X-future4265 小时前
院校机试刷题第六天:1134矩阵翻转、1052学生成绩管理、1409对称矩阵
线性代数·算法·矩阵
Codeking__5 小时前
前缀和——中心数组下标
数据结构·算法
爱喝热水的呀哈喽5 小时前
非线性1无修
算法
花火QWQ6 小时前
图论模板(部分)
c语言·数据结构·c++·算法·图论
Pacify_The_North6 小时前
【进程控制二】进程替换和bash解释器
linux·c语言·开发语言·算法·ubuntu·centos·bash