1. 程式人生 > 其它 >LC202-快樂數

LC202-快樂數

力扣題目連結

編寫一個演算法來判斷一個數 n 是不是快樂數。

「快樂數」定義為:對於一個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是 無限迴圈 但始終變不到 1。如果 可以變為 1,那麼這個數就是快樂數。

如果 n 是快樂數就返回 True ;不是,則返回 False 。

示例:

輸入:19
輸出:true
解釋:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

思路:

題目中說了可能會 無限迴圈,那麼也就是說求和的過程中,sum(平方和)會重複出現,因此 ,當我們遇到了要快速判斷一個元素是否出現集合裡的時候,就要考慮雜湊法了。

這裡我們可以使用hashset中的contains函式來判斷是否存在該數,如果有則false退出迴圈,否則將該數加入集合中。

class Solution {
    public boolean isHappy(int n) {
        Set<Integer> s = new HashSet<>();
        //該數等於1或者該數重複出現都會結束迴圈
        while(n != 1 && !s.contains(n)){ 
            s.add(n);
            n=getNext(n);
        }
        if(n==1)
        return true;
        else return false; //if else可以直接寫為 return n==1; 如果n!=1則返回false反之true
    }
    public int getNext(int n){
        int k=0;
        while(n > 0){
            int temp=n%10;
            k+=temp*temp;
            n=n/10;
        }
        return k;
    }
}