双指针的基本思想:
首先根据异地操作确定指针的基本步骤,再将异地操作优化成原地操作的双指针解法
题解:
本题并非是在数组中,因此不适用上述的双指针基本思想
数字n经过题中所说过程,只有两种结果:值变为1,随后无限循环1;从值m无限循环到值m。因此可以设计快慢指针fast和slow,fast每次执行两次过程,slow每次执行一次过程,最终fast和slow一定会相等。如果相等时为1,那么数字n就是快乐数;如果相等时不为1,那么数字n就不是快乐数。
class Solution {
public:
//计算num的下一个数
int NextNum(int num)
{
int nextNum=0;
while(num)
{
nextNum+=pow(num%10,2);
num/=10;
}
return nextNum;
}
//判断是否为快乐数
bool isHappy(int n)
{
//快慢指针
int fast=0,slow=0;
fast=NextNum(n);
fast=NextNum(fast);
slow=NextNum(n);
while(fast!=slow)
{
fast=NextNum(fast);
fast=NextNum(fast);
slow=NextNum(slow);
}
if(fast==1) return true;
else return false;
}
};