今天你快乐了吗?
谨以此篇文章记录快乐数的解法
题目:
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例:
输入: 19 输出: true 解释: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1
我们以上面的示例来思考一下
19是快乐数,返回true
判断19为快乐数的依据是将19拆分开,计算每位数字的平方和,然后重复此运算。直到平方和恒为1,则确认为快乐数;否则,就不是快乐数。
那我们就可以根据以上思路设计解题算法(以下解法都是Java语言)
解法一
此解法思路是使循环计算“n"的平方和,直至平方和恒等于一个值。然后判断这个值是否为1。
时间复杂度为O(n)
class Solution {
public boolean isHappy(int n) {
int slow=sum_happy(n),fast=sum_happy(sum_happy(n)); //slow为n的每个数字的平方和,fast为slow的每个数字的平方和
wh