题目解析
Leetcode 202.快乐数
看完题目描述相信大家已经知晓题目的含义,我们通过一张图再剖析一下题目含义
快乐数或者非快乐数都是可以成环的,这个是数学上已经证明了的。所以这道题的最后含义就是分辨出环中全部是1或者全部没有1的
双指针
成环问题我们在做链表的时候也是使用的双指针,这里我们通过画图看到系列问题的解决方法。定义两个“指针”,每一次这两个指针不断挪动不同的步数。我们知道,在环里面的指针一定会有相遇位置,所以我们通过判断这个相遇节点是否是1就完成了本道LeetCode
代码编写
class Solution {
public:
//相当于指针往后面移动一步int BitSum(int num){int ret = 0;while(num){ret += pow(num % 10, 2);num /= 10;}return ret;}bool isHappy(int n) {int slow = n;int fast = BitSum(n);while(fast != slow){slow = BitSum(slow);fast = BitSum(BitSum(fast));}//走到这里,说明一定是相遇了,判断就是了if(fast == 1)return true;return false;}
};