【优选算法】3----快乐数
这是第三篇算法题,也是十分的不好想,虽然定位在简单,但我感觉还是有些难度的~
-------------------------------------begin-----------------------------------------
题目解析:
同样的,这道算法题,看题目的话,也是很难理解的但我们抠字眼,“无限循环”,这就让我们想到了链表,带环链表和不带环链表,快慢指针的思想~
讲解算法原理:
这道题,我们可以运用前面所理解的两种思路,链表和快慢指针的思路来遍历,定义两个指针slow和fast分别指向第一个数和下一个数,两个指针不相遇则继续遍历下去,slow一次走一个数,fast一次走两个数,额外还需要一个函数将参数n进行位数拆分计算~
编写代码:
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;
}
};
过程不算复杂,只是思路比较难理解~
想试试水的铁子也可以去做一下哦~
--------------------------------------end------------------------------------------
原文地址:https://blog.csdn.net/2401_86275172/article/details/145287832
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!