题目
编写一个算法来判断一个数 n 是不是快乐数。快乐数定义为:
- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
- 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
- 如果 可以变为 1,那么这个数就是快乐数。
示例 1:
输入: n = 19
输出: true
解释:
82 -> 68 -> 100 -> 1
示例 2:
输入: n = 2
输出: false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/happy-number
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
使用快慢指针
利用链表的思想,用快慢指针看是否有环,若有环且没有涉及n = 1的数就不是快乐数
class Solution {
public boolean isHappy(int n) {
int p = n;
int q = count(n);
while(p != q && q != 1 ){
p = count(p);
q = count(count(q));
}
if(q == 1) return true;
return false;
}
public int count(int n) {
int num = 0;
while(true){
int x = n % 10;
n = n / 10;
num += x * x;
if(n == 0) break;
}
return num;
}
}