题解 | #奶牛快乐数#
奶牛快乐数
https://www.nowcoder.com/practice/d91cec70c7724a7dbcea02ed25bdeaee
考察的知识点:快慢指针;
解答方法分析:
- 定义快慢指针,初始时都指向数字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;
}
};
查看2道真题和解析