文章目录
快乐数(附链接)
https://leetcode.cn/problems/happy-number/description/
一、题目描述

二、思路
第一种情况,当n=19时,通过重复计算这个数最终变为1,形成一个全是1的环。

第二种情况,当n=2时,通过重复计算,发现最终也会形成一个环,一个没有1的环。

所以可以定义两个指针,快指针fast一次走两步,慢指针slow一次走一步,看它们相遇的时候的数是不是1,如果是1,则这个数就为快乐数,否则这个数就不是快乐数。
三、关键点
- 能想到用快慢双指针来解决这道题
四、代码(Java / 你常用语言)
java
class Solution {
public int sqrtSum(int n) {
int sum = 0;
while (n != 0) {
//计算每个位数上的平方和
int i = n % 10;
sum += i * i;
n = n / 10;
}
return sum;
}
public boolean isHappy(int n) {
//让fast指针先走一步,这样才能进入后面的循环中
int fast = sqrtSum(n);
int slow = n;
while (slow != fast) {
//slow走一步,fast走两步
slow = sqrtSum(slow);
fast = sqrtSum(sqrtSum(fast));
}
return slow ==1 ;
}
}
五、总结
- 这题属于什么类型?
这道题本质属于"数学 + 链表判环思想"的问题,可以看作是对数字进行不断变换后形成的序列问题。