简介
题目链接:https://leetcode.cn/problems/happy-number/description/
解决方式:数 + 双指针
这是作者学习众多大神的思路进行解题的步骤,很推荐大家解题的时候去看看题解里面大佬们的思路、想法!
双指针
思路:快乐数的判断本质上是一个数学计算过程,算到最后有两种结果。一种是从某处开始进行了循环,一种是收敛为一。此处我们使用双指针进行判断,快指针走两步,慢指针走一步。若有循环,则快慢指针会相遇,否则都会收敛到一。
推荐 金字塔下的小蜗牛 大佬的题解!
java
class Solution {
public boolean isHappy(int n) {
// 双指针
int fast = n;
int slow = n;
// 循环,如果快慢指针相遇说明不是快乐数,否则是
do {
fast = bitSquareSum(fast);
fast = bitSquareSum(fast);
slow = bitSquareSum(slow);
}while(fast != slow);
// 退出循环有两种情况
// 一种是快慢指针相遇,不是快乐数
// 一种是快慢指针最终收敛为 1,是快乐数
return slow == 1;
}
// 各数平方和
private int bitSquareSum(int n){
// 和
int sum = 0;
// 循环提取各数进行平方和
while(n != 0){
int bit = n % 10;
sum += bit * bit;
n = n / 10;
}
// 返回
return sum;
}
}