这是第三篇算法题,也是十分的不好想,虽然定位在简单,但我感觉还是有些难度的~
-------------------------------------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;}
};
过程不算复杂,只是思路比较难理解~
想试试水的铁子也可以去做一下哦~
202. 快乐数 - 力扣(LeetCode)