快乐数——哈希表

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

「快乐数」 定义为:

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

如果 n快乐数 就返回 true ;不是,则返回 false

思路:不容易判断的点在于 无限循环的情况。

数字平方和一定会让数变小

设一个数有 k 位,那么它的最大值是:10^k - 1。

它的各位数字最大是 9。每位平方最大是 81。

所以 k 位数的平方和最大是:81 * k。

而 k 位数本身至少是:10^(k-1)

比较:

位数 最小 k 位数 数位平方和最大值
3 100 81 * 3 = 243
4 1000 81 * 4 = 324
5 10000 81 * 5 = 405

你会发现:

从 4 位数开始,下一步一定会掉到 324 以下。

从这开始,无论你多大,最终都会掉进一个固定的小范围内。

✔ 情况 A:最终变成 1(快乐)

✔ 情况 B:在某处形成循环(不快乐)

所以无限循环,也就是非快乐数,必然意味着某个数重复出现。

python 复制代码
class Solution:
    def isHappy(self, n: int) -> bool:
        s=set()
        while True:
            n=self.getSum(n)
            if n==1:
                return True
            else:
                if n in s:
                    return False
                s.add(n)

    def getSum(self,n):
        sum = 0
        while n:
            sum+=(n%10)**2
            n//=10
        return sum

print(Solution().isHappy(19))
相关推荐
方安乐9 小时前
python之向量、向量和、向量点积
开发语言·python·numpy
zh15702311 小时前
JavaScript中WorkerThreads解决服务端计算瓶颈
jvm·数据库·python
Old Uncle Tom11 小时前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
会编程的土豆11 小时前
洛谷题单入门1 顺序结构
数据结构·算法·golang
生信碱移11 小时前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
蜡台11 小时前
Python包管理工具pip完全指南-----2
linux·windows·python
Mr.朱鹏11 小时前
【Python 进阶 | 第四篇】Psycopg3 + Flask 实现 PostgreSQL CRUD 全流程:从连接池到RESTful接口
python·postgresql·flask·virtualenv·fastapi·pip·tornado
智者知已应修善业11 小时前
【51单片机中的打飞机设计】2023-8-25
c++·经验分享·笔记·算法·51单片机
2401_8714928512 小时前
Vue.js监听器watch利用回调函数处理级联下拉框数据联动
jvm·数据库·python
FreakStudio12 小时前
亲测可用!可本地部署的 MicroPython 开源仿真器
python·单片机·嵌入式·面向对象·并行计算·电子diy·电子计算机