題目鏈接202. 快樂數 - 力扣(LeetCode)
題目拆解
1 取一個正整數每一位的平方和為,如果為1那么直接可以判定為快樂數,如果不為1,就重復這個過程,直到出現1
2 實際上,這道題只有兩種情況,并且兩種情況都會出現循環,1不管怎么重復操作的得到的都是1,各位數2不管怎么操作還是2,不存在無限循環的不同個體
3 所以我們這里可以很自然的就聯想到快慢指針來找循環的方法,相遇的時候剛好是進入循環的時候
解題步驟
1 可以先包裝平方和的操作,方便主函數中直接調用
2 接著寫函數主體,先設置初始值,slow指=指針指向第一位,fast指針指向第二位,接著讓slow指針調用一次sum函數,相當于走一步;讓fast指針調用兩次sum,相當于走兩步
3 最后根據相遇的時候二者的值就可以直接返回了
class Solution {
public:
int sum(int n)
{int sum=0;//返回平方和之后的數while(n>0){int m=n%10;sum+=m*m;n/=10;}return sum;
}bool isHappy(int n){int slow=n;int fast=sum(n);while(fast!=slow)//相遇的時候進入循環{slow=sum(slow);fast=sum(sum(fast));}//都為1的時候說明為快樂數return slow==1;}
};