【力扣算法题】快乐数

本文介绍了如何判断一个数是否是快乐数,即通过计算每个位置数字的平方和重复此过程,直到达到1或者形成循环。力扣提供了两种解法:1. 使用哈希集合检测循环,2. 应用快慢指针方法。文章提供了Python和C++的代码实现。
摘要由CSDN通过智能技术生成

【力扣算法题】快乐数



题目介绍

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

「快乐数」 定义为:

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

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


题解

1. 哈希集合检测(力扣官方解法1)

这题搞清楚快乐数的原理其实就很好解决了

首先肯定不能无限循环,但我们什么时候才能确定这个数不是快乐数?
答案就是循环,如果两个同样的数出现了,那么必然说明这个数不是快乐数

另外,有没有可能不出现循环呢?
答案是否定的,除了个位数和2位数以外,无论多少位的位数求各位平方和都不可能大于这个位数的最大值
例如:

  • 999 > 3 * (9^2)
  • 9999 > 4 * (9^2)
  • 99999 > 5 *(9^2)

那么剩余的就是解法问题,力扣给的第一个办法是哈希集合检测,没遇到过的数加入集合,再遇到了直接返回false

Python源码(很可惜这题力扣没给C++,但Python看着可真清爽):

def isHappy(self, n: int) -> bool
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值