Here是leetcode中的快乐数字问题
这是溶液的one
使用floyd循环检测算法。

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);
    } while(slow != fast);
    if (slow == 1) return 1;
    else return 0;
}

有无限循环的机会吗?

最佳答案

只有当迭代digitSquareSum可以无限增长时,才会有无限循环但当用n位数字调用时,结果总是小于100n,因此不会发生这种情况,因为对于n>=4,结果总是小于用作输入的数字。
所有这些都忽略了大多数语言中的整数不能任意大,如果结果在数学上增长到无穷大,就会出现整数溢出结果可能是错误的,但仍然不会有无限循环。

关于algorithm - leetcode中的这个快乐数字解决方案中有无限循环吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53446492/

10-08 22:13