Leetcode 202 Happy Number 弗洛伊德判环解循环
今天先谈下弗洛伊德判环,弗洛伊德判环原来是在一个圈内有两人跑步,同时起跑,一人的速度是另一人的两倍,则那个人能在下一圈追上另一个人,弗洛伊德判环能解数字会循环出现的题,比如说判断一个链表是不是循环链表。在程序中具体表现为
one = change(one); //一倍速度
two = change(change(two));//两倍速度
即一倍速度的人调用生成函数change一次,两倍速度的人调用生成函数change两次。
Leetcode 202 Happy Number 就是这样一道简单的题,实现方法有很多,但是弗洛伊德判环是比较简单,同时效率也是较高的那种。
class Solution { public: int change(int n){ int ans = 0; for ( ; n!=0 ; ans+= (n%10)*(n%10),n/=10); return ans; } bool isHappy(int n) { int one = n; int two = n; while(1){ one = change(one); //一倍速度 two = change(change(two));//两倍速度 if(one == 1 || two == 1) return true; if(one == two) return false; } } };