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;

    }
};
相关推荐
田梓燊几秒前
leetcode 48
算法·leetcode·职场和发展
mmz12075 分钟前
深度优先搜索DFS2(c++)
c++·算法·深度优先
6Hzlia5 分钟前
【Hot 100 刷题计划】 LeetCode 169. 多数元素 | C++ 哈希表基础解法
c++·leetcode·散列表
米粒17 分钟前
力扣算法刷题 Day 38 (打家劫舍专题)
算法·leetcode·职场和发展
Robot_Nav12 分钟前
RC-ESDF与Lazy Theta* 算法结合进行离线全局路径的生成
算法·全局规划·esdf
papership13 分钟前
【入门级-算法-7、搜索算法:深度优先搜索】
算法·深度优先
山甫aa27 分钟前
哈希集合-----从零开始的数据结构学习
数据结构·算法·哈希算法
say_fall30 分钟前
有关算法的简单数学问题
数据结构·c++·算法·职场和发展·蓝桥杯
Halo_tjn30 分钟前
Java 接口的定义重构学生管理系统
java·开发语言·算法
阿Y加油吧37 分钟前
栈的经典应用:从「有效括号」到「寻找两个正序数组的中位数」深度解析
开发语言·python·算法