資金盤網(wǎng)站開發(fā)價格國外比較開放的社交軟件
今天分享的題目是快樂數(shù):
快樂數(shù)的定義如下:
快樂數(shù)(Happy Number)是指一個正整數(shù),將其替換為各個位上數(shù)字的平方和,重復(fù)這個過程直到最后得到的結(jié)果為1,或者無限循環(huán)但不包含1。如果最終結(jié)果為1,則該數(shù)為快樂數(shù);如果最終結(jié)果不為1且進入了循環(huán),則該數(shù)不是快樂數(shù)。
解題思路:快樂數(shù)的迭代過程是一個無環(huán)的過程,而不是快樂數(shù)則會出現(xiàn)環(huán)導(dǎo)致無限循環(huán)。
eg:19-82-68-100-1;
2-4-16-37-58-89-145-42-20-4.
我們觀察發(fā)現(xiàn)如果不是快樂數(shù)會出現(xiàn)重復(fù)的數(shù)字,因此我們根據(jù)這一點可以選擇使用set
集合進行題解。
下面結(jié)合代碼進行思路的進一步講解:
class Solution {
//用于計算每個數(shù)字的平方和并進行返回public int comsum(int x){int sum=0;int k=0;while(x>0){k=x%10;sum+=k*k;x=x/10;}return sum;}public boolean isHappy(int n) {Set<Integer> set1=new HashSet<>();//將n存入set1中,set1.add(n);while(n!=1){//n每次循環(huán)進行更新為它的平方和n=comsum(n);//如果set集合中出現(xiàn)的重復(fù)的,說明不是快樂數(shù)if(!set1.add(n)){return false;}}//n=1為快樂數(shù)return true;}
}
那么還有一個需要注意的點是:if(!set1.add(n))
,這個判斷條件的執(zhí)行順序,我們首先執(zhí)行的是set.add(n)
,然后進行取反的操作。
小tips:set.add(n)
的返回值說明:如果n在set集合中返回false,如果n不在這個集合中那么返回true。這一點也需要著重注意。
那么本道題的解題就到此結(jié)束了,創(chuàng)作不易希望給博主點個小愛心!xx