力扣刷题:3-快乐数(202)

171 阅读1分钟

快乐数的问题,也可以转化为链表找环的问题,将计算快乐数的每一个结果当做链表节点,如果这个链表中有环,那就不是快乐数,如果某一次的计算值是1,也就是到了尾节点,说明这个数就是快乐数。

下面是用C语言实现的代码:

#include <math.h>

bool isHappy(int n){
    int slow = n;
    int fast = n;
    do {
        slow = nextNumber(slow);
        fast = nextNumber(fast);
        fast = nextNumber(fast);
        if (slow == fast) {
            break;
        }
    } while (fast != 1);
    return fast == 1;
}

// 求下一个值(每个位置数字的平方的和)
int nextNumber(int n) {
    int sum = 0;
    do {
        sum += pow(n % 10, 2); // 余数,计算平方
        n = n / 10;
    } while (n != 0);
    return sum;
}