这是第三篇算法题,也是十分的不好想,虽然定位在简单,但我感觉还是有些难度的~
-------------------------------------begin-----------------------------------------
题目解析:
同样的,这道算法题,看题目的话,也是很难理解的但我们抠字眼,"无限循环",这就让我们想到了链表,带环链表和不带环链表,快慢指针的思想~
讲解算法原理:
这道题,我们可以运用前面所理解的两种思路,链表和快慢指针的思路来遍历,定义两个指针slow和fast分别指向第一个数和下一个数,两个指针不相遇则继续遍历下去,slow一次走一个数,fast一次走两个数,额外还需要一个函数将参数n进行位数拆分计算~
编写代码:
cpp
class Solution
{
int bitSum(int n)
{
int sum=0;
while(n)
{
int t=n%10;
sum+=t*t;
n/=10;
}
return sum;
}
public:
bool isHappy(int n)
{
int slow=n,fast=bitSum(n);
while(slow!=fast)
{
slow=bitSum(slow);
fast=bitSum(bitSum(fast));
}
return fast==1;
}
};
过程不算复杂,只是思路比较难理解~
想试试水的铁子也可以去做一下哦~