LeetCode-202:快乐数

本文介绍了一种用于判断正整数是否为快乐数的算法。快乐数是指通过不断将其各位数字的平方和相加直至结果为1的过程,若过程中形成循环且结果不为1,则该数不是快乐数。文中提供了C++及Python两种语言的具体实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。

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

代码实现
C++:

模拟平方和更新过程,记录出现过的平方和,若某个数字出现两次,说明程序会一直在这两个数字之间死循环,即不是快乐数,直接返回false。否则可以到达平方和为1,返回true。

class Solution {
public:
    bool isHappy(int n) {
        map<int, bool> appearNums;
        while(n > 1){
            int temp = 0;
            while(n > 0){
                temp += (n%10)*(n%10);
                //获取下一位数
                n /= 10;
            }
            n = temp;
            //判断temp是否是第一次在appearNums(映射表)中出现
            if(appearNums.count(temp) == 0){
                appearNums[temp] = true;
            }
            else{
                //第二次出现,意味着后面将会进入死循环
                return false;
            }
        }
        return true;
    }
};

Python:

class Solution(object):
    def isHappy(self, n):
        """
        :type n: int
        :rtype: bool
        """
        # 如果是happy数据,每个求平方和的数字只会出现一次
        appearNums = []
        while n > 1:
            # 1的平方和就是1
            temp = 0
            # 求每位数的平方和
            while n > 0:
                temp += (n%10)**2
                # 获取下一位数
                n /= 10
            n = temp 
            # 将每一次平方和数据添加到列表
            if temp not in appearNums:
                appearNums.append(temp)
            else:
                # 如果是happy数每个平方和的数只能出现一次
                # 出现两次意味着进入死循环
                return False
        
        return True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值