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;

    }
};
相关推荐
Jane-66677715 分钟前
C语言——表达式、语句、函数
c语言·开发语言·算法
Tony_yitao22 分钟前
12.华为OD机试 - N个选手比赛前三名、比赛(Java 双机位A卷 100分)
java·算法·华为od·algorithm
小龙报23 分钟前
【算法通关指南:数据结构与算法篇】树形结构遍历指南:DFS 递归深搜与 BFS 队列广搜实战解析
c语言·数据结构·c++·算法·链表·深度优先·visual studio
业精于勤的牙23 分钟前
浅谈:快递物流与算法的相关性(六)
算法
qq_4335545426 分钟前
C++ 二维线性DP
c++·算法·图论
风筝在晴天搁浅29 分钟前
代码随想录 115.不同的子序列
算法
c#上位机35 分钟前
halcon2个区域合并为1个区域—union2
图像处理·算法·计算机视觉·halcon
程序员-King.42 分钟前
双指针/滑动窗口—算法总结与教学指南
经验分享·算法·双指针
小武~1 小时前
Leetcode 每日一题C 语言版 -- 274 H-index
c语言·算法·leetcode
0 0 01 小时前
CCF-CSP 36-3 缓存模拟(cache)【C++】
开发语言·c++·算法