大家好,我是开车的阿Q,自动驾驶的时代已经到来,没时间解释了,快和阿Q一起上车。作为自动驾驶系统工程师,必须要有最好的C++基础,让我们来一起刷题吧。

题目考察的知识点

本题主要考察循环和数学运算。

题目解答方法的文字分析

我们可以使用一个循环来模拟将编号替换为每个位数上的数字的平方和的过程,直到得到的结果为1或者出现循环。在模拟的过程中,我们可以使用一个哈希表来记录出现过的结果,以防止进入无限循环。如果最终得到的结果为1,那么这个编号对应的奶牛就是快乐奶牛;否则,不是快乐奶牛。

本题解析所用的编程语言

C++

完整且正确的编程代码

#include <unordered_set>
using namespace std;

class Solution {
public:
    bool isHappy(int n) {
        unordered_set<int> visited; // 用于记录已经出现过的结果
        while (n != 1 && !visited.count(n)) {
            visited.insert(n); // 将当前结果加入哈希表
            n = getNextNumber(n); // 获取下一个结果
        }
        return n == 1;
    }
    
    int getNextNumber(int n) {
        int sum = 0;
        while (n > 0) {
            int digit = n % 10;
            sum += digit * digit;
            n /= 10;
        }
        return sum;
    }
};

注意:以上代码中使用了unordered_set来记录已经出现过的结果,并使用getNextNumber函数来获取编号每个位数上的数字的平方和。

您的关注、点赞、收藏就是我创作的动力,三连支持阿Q!