fqy131314

快乐数(力扣刷题)

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

        对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
        然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
        如果这个过程 结果为 1,那么这个数就是快乐数。
        如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

        示例 1:

        输入:n = 19
        输出:true
        解释:
        12 + 92 = 82
        82 + 22 = 68
        62 + 82 = 100
        12 + 02 + 02 = 1


        示例 2:

        输入:n = 2
        输出:false

提示:

1 <= n <= 231 - 1

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/happy-number
 

思路:

        题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!

        当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。

        所以这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。

        判断sum是否重复出现就可以使用unordered_set。

        还有一个难点就是求和的过程,如果对取数值各个位上的单数操作不熟悉的话,做这道题也会比较艰难。

代码如下:

class Solution 
{
public:
    int getNum(int n)
    {
        int sum = 0;
        while(n)
        {
            sum += (n % 10) * (n % 10);
            n = n /10;
        }

        return sum;
    }

    bool isHappy(int n)
     {
        unordered_set<int> set;

       
        while(1)
        {
            int sum = getNum(n);
            if(sum == 1)
            {
                return true;
            }

            if(set.find(sum) != set.end())
            {
                return false;
            }else
            {
                set.insert(sum);
            }

            n = sum;    
         } 
    }
};

感谢carl哥

posted on   会飞的鱼-blog  阅读(21)  评论(0编辑  收藏  举报  

相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示