考察的知识点:快慢指针;
解答方法分析:
- 定义快慢指针,初始时都指向数字n。
- 使用一个循环来判断快慢指针指向的数字是否为1或者快慢指针是否相等。在每一次循环中,快指针先进行一次平方和操作,慢指针进行一次平方和操作。然后,快指针再进行一次平方和操作。
- 如果循环结束后,快指针指向的数字为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; } };