力扣——快乐数点击链接即可跳转
根据题目示例,分为两种情况,示例二无限循环始终变不成1.
无论是示例一还是示例二,都形成环,我们要判断这个数是否是快乐数,只需判断环内的值是多少就可以,看环内的数是否为1。此题运用快慢指针。
定义快慢指针,快指针每次向后移动两步,而慢指针每次向后移动一步,在环内相遇地方的值为1,则该数为快乐数。
代码如下
class Solution {public boolean isHappy(int n) {int fast = squaresSum(n);int slow = n;while(fast != slow){slow = squaresSum(slow);fast = squaresSum(squaresSum(fast));}return fast == 1;//返回fast或者slow都可以}//返回一个数的平方和public int squaresSum(int n){int sum = 0;while(n != 0){int digit = n % 10;sum = sum + digit * digit;n = n / 10;}return sum;}
}