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;

    }
};
相关推荐
飘尘2 小时前
从"算子"到"AI Infra":大模型背后看不见的那群人在忙什么
人工智能·算法·面试
夏幻灵3 小时前
每日一题:LeetCode 3:无重复字符的最长子串——滑动窗口思路详解
算法·leetcode·职场和发展
CarIise3 小时前
Java实训阶段查漏补缺复习笔记2
java·linux·算法
无忧.芙桃3 小时前
C++ 并查集详解:原理、实现与应用
c语言·c++·算法·leetcode
蛋蛋的就会顺顺的4 小时前
hot100——二叉树
java·数据结构·算法·leetcode·力扣
Code_Solitude4 小时前
c语言:二分法的完整补充
c语言·开发语言·算法
一切皆是因缘际会4 小时前
掌控信息论:同源星际通信基础理论
人工智能·算法·ai
动词ing6 小时前
【C语言题目练习】算法 整数反转
c语言·开发语言·算法
Nil2086 小时前
leetcode 55跳跃游戏
算法·leetcode·游戏
longlongzihan7 小时前
LeetCode 128. 最长连续序列 —— 从排序到哈希集合
数据结构·c++·算法·leetcode·排序算法·哈希表