[2016/12/8]happy number:application of Floyd's Cycle Detection Algorithm

来源:互联网 发布:在家网络兼职招聘 编辑:程序博客网 时间:2024/06/05 18:18

题目大意

求一个数是不是happy number(定义戳这里)

我的思路

数字如果不是happy number,就会一直被困在循环里,因为会出现同一个数字出现两次的情况。直接的思路是用set,如果一个数字出现了两次,就返回false。

别人的思路

我的做法空间复杂度略高。看了下面别人的解,空间复杂度仅为N1。大致就是设立快慢两个指针,如果存在环,两个指针一定会相遇。
参考:Floyd’s Cycle Detection Algorithm

别人的代码

int digitSquareSum(int n) {        int sum = 0, tmp;        while (n) {            tmp = n % 10;            sum += tmp * tmp;            n /= 10;        }        return sum;    }    bool isHappy(int n) {        int slow, fast;        slow = fast = n;        do {            slow = digitSquareSum(slow);            fast = digitSquareSum(fast);            fast = digitSquareSum(fast);            if(fast == 1) return 1;        } while(slow != fast);         return 0;
0 0
原创粉丝点击