考察的知识点:快慢指针;

解答方法分析:

  1. 定义快慢指针,初始时都指向数字n。
  2. 使用一个循环来判断快慢指针指向的数字是否为1或者快慢指针是否相等。在每一次循环中,快指针先进行一次平方和操作,慢指针进行一次平方和操作。然后,快指针再进行一次平方和操作。
  3. 如果循环结束后,快指针指向的数字为1,则编号为n的奶牛是快乐奶牛;否则,不是快乐奶牛。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    bool isHappy(int n) {
        int slow = n;
        int fast = getNext(n);

        while (fast != 1 && slow != fast) {
            slow = getNext(slow);
            fast = getNext(getNext(fast));
        }

        return fast == 1;
    }
  private:
    int getNext(int n) {
        int sum = 0;
        while (n > 0) {
            int digit = n % 10;
            sum += digit * digit;
            n /= 10;
        }
        return sum;
    }
};