LeetCode 202 快乐数

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

法一:哈希

使用哈希表循环判断每次经过平方和的数,如果为1则直接返回true,若之前存在过但不为1则直接返回false

代码

cpp 复制代码
class Solution 
{
public:
    // 计算快乐数
    int bitsum(int n)
    {
        int sum=0;
        while(n)
        {
            int a=n%10;
            sum+=a*a;
            n/=10;
        }
        return sum;
    }
    bool isHappy(int n) 
    {
        unordered_set<int> hash;
        while(true)
        {
            int sum=bitsum(n);
            // 如果此次经过bitsum函数之后是1则直接返回true
            if(sum==1) return true;
            if(hash.find(sum) != hash.end())
            {
                // 该数存在过,但是不为1则直接返回false
                return false;
            }
            else
            {
                // 如果不为1也不存在,插入哈希表中
                hash.insert(sum);
            }
            n=sum;
        }
    }
};

法二:快慢指针

题目解析

判断相遇的时候是否为1,若不为1则返回false,若为1则返回true

代码

cpp 复制代码
class Solution 
{
public:
    // 计算快乐数
    int bitsum(int n)
    {
        int sum=0;
        while(n)
        {
            int a=n%10;
            sum+=a*a;
            n/=10;
        }
        return sum;
    }
    bool isHappy(int n) 
    {
        // 定义快慢指针
        int slow=n,fast=bitsum(n);

        // 只要快指针的数不等于慢指针就继续循环调用
        while(slow!=fast)
        {
            slow=bitsum(slow);
            fast=bitsum(bitsum(fast));
        }
        // 看最终相遇位置慢指针是否为1 若不为1则返回false
        return slow==1;

    }
};
相关推荐
com_4sapi1 小时前
2025 权威认证头部矩阵系统全景对比发布 双榜单交叉验证
大数据·c语言·人工智能·算法·矩阵·机器人
前端小L1 小时前
二分查找专题(九):“降维”的魔术!将二维矩阵“拉平”为一维
数据结构·算法
Jasmine_llq1 小时前
《P7516 [省选联考 2021 A/B 卷] 图函数》
算法·弗洛伊德算法·floydwarshall算法·后缀和计算
kaikaile19951 小时前
三维CT图像重建算法
算法
她说人狗殊途1 小时前
时间复杂度(按增长速度从低到高排序)包括以下几类,用于描述算法执行时间随输入规模 n 增长的变化趋势:
数据结构·算法·排序算法
计科土狗1 小时前
算法基础入门第一章
c++·算法
与己斗其乐无穷1 小时前
算法(二)滑动窗口
算法
Ghost-Face1 小时前
恭喜自己,挑战成功!
算法
Miraitowa_cheems2 小时前
LeetCode算法日记 - Day 102: 不相交的线
数据结构·算法·leetcode·深度优先·动态规划
ByteX2 小时前
算法练习-成功之后不许掉队
算法