202:快乐数
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例:
问题分析:题目定义了一个快乐数,取每个位置上的数字,进行平方之和,重复该过程,如果可以变为1则为快乐书。
一个数是不是快乐数看它经过计算是否变为一,但是计算的次数不确定,所以我这里采用双指针的方法,一个快指针,一个慢指针。慢指针里存的是执行计算前的数字,快指针里存的是执行后的数字,两者是否相等作为while的循环条件。拿到一个数判断它是不是快乐数,肯定是要运算的,两个指针两个数进行比较,如果不相同就接着循环,如果相同就判断它是否等于1,接着返回结果。
代码实现:
class Solution {
public boolean isHappy(int n) {
//快指针存放计算后的数,满指针存放计算前的数
int slow=happyNum(n);
int fast=happyNum(happyNum(n));
while(slow!=fast){//两个数字不相等则分别在进行一次运算然后赋值
slow=happyNum(slow);
fast=happyNum(happyNum(fast));
}
return slow==1; //判断是否快乐
}
//创建一个求将各个位置的数字平方之和的方法
private int happyNum(int n){
int sum=0;
while(n!=0){
int b=n%10;
sum=sum+b*b;
n=n/10;
}
return sum;
}
}