这道题一开始卡在如何判断无限循环,看了提示才想到用集合,对set的性质还是不够熟悉,没有抓住无限循环的内涵,它会形成类似于环这样的东西
对递归使不使用return很犹豫,如果有返回值时就应该使用return,否则内层函数的返回值无法返回给上一层的函数;使用了return更像是一直递,以最后一层的函数返回值作为整个函数的返回值,因为上一层函数已经return了,而没有使用return时上一层函数还没结束就递归到下一层函数,最后一层函数返回值不能返回给整个函数
快慢指针也是一种思路,如果快指针慢指针相遇且慢指针不等于1则不存在快乐数(因为存在环了),没有相遇则存在快乐数,快指针会先到1等慢指针到1
class Solution {
public:
int bitSquareSum(int n) {
int sum = 0;
while(n > 0)
{
int bit = n % 10;
sum += bit * bit;
n = n / 10;
}
return sum;
}
bool isHappy(int n) {
int slow = n, fast = n;
do{
slow = bitSquareSum(slow);
fast = bitSquareSum(fast);
fast = bitSquareSum(fast);
}while(slow != fast);
return slow == 1;
}
};