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;

    }
};
相关推荐
liu****20 分钟前
20.哈希
开发语言·数据结构·c++·算法·哈希算法
夏鹏今天学习了吗1 小时前
【LeetCode热题100(47/100)】路径总和 III
算法·leetcode·职场和发展
smj2302_796826521 小时前
解决leetcode第3721题最长平衡子数组II
python·算法·leetcode
m0_626535201 小时前
力扣题目练习 换水问题
python·算法·leetcode
第六五1 小时前
DPC和DPC-KNN算法
人工智能·算法·机器学习
一匹电信狗1 小时前
【LeetCode_160】相交链表
c语言·开发语言·数据结构·c++·算法·leetcode·stl
再卷也是菜2 小时前
C++篇(14)二叉树进阶算法题
c++·算法
小邓儿◑.◑2 小时前
贪心算法 | 每周8题(三)
算法·贪心算法
2401_841495642 小时前
【数据结构】最长的最短路径的求解
java·数据结构·c++·python·算法·最短路径·图搜索
小龙报2 小时前
《算法每日一题(1)--- 连续因子》
c语言·开发语言·c++·windows·git·算法·visual studio