202.快乐数
😹 202.快乐数
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
思路
基本思想
基本思想就是对一个数分离各个位上的数并平方求和,如果不是1就继续分离并求和,直到遇到1,但是分离并求和的过程中肯定不是一直分离下去,一旦遇到之前求和过的结果,肯定会陷入死循环,此时这个数肯定不是快乐数
所以需要将问题分解,首先求当前数的分离之后的平方和结果,判断这个数是否之前出现过,这一步需要借助一个容器存储之前出现的所有结果,这里使用unordered_set,因为他的存储效率和查询速度在这里最适合
将问题分解之后就是简单的代码了
执行流程
- 定义分离求平方和的函数
- 对当前的数求平方和
- 判断平方和是否为1,是的话就是快乐数,返回true
- 不是的话需要判断这个结果之前是否出现过
- 出现过说明陷入死循环,直接返回false
- 没出现过继续对当前的数分离求平方和
代码
根据以上分析,得出以下代码:
|
|
总结
主要是知道如何将一个不知道位数的数的各个位分离下来,并且知道当前的平方和在之前出现过则说明陷入死循环,当前的数一定不是快乐数