四. hash table1 "快樂數"

寫一個算法來判斷一個數是不是"快樂數"。

一個數是不是快樂是這么定義的:對于一個正整數,每一次將該數替換為他每個位置上的數字的平方和,然后重復這個過程直到這個數變為1,或是無限循環但始終變不到1。如果可以變為1,那么這個數就是快樂數。

樣例:
19 就是一個快樂數。
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

思路:將int型的數字轉化為string,通過string的內置函數將它轉化為數組,再用兩個循壞嵌套,得到1時就返回true。
如何判斷flase是這道題的關鍵:這里我認為題中所說無限循環,是指計算后得到的結果重復出現。

Python3

class Solution:
    # @param {int} n an integer
    # @return {boolean} true if this is a happy number or false
    def isHappy(self, n):
        # Write your code here
        number_appeared = set()
        while n != 1:
            numbers = str(n)
            n = 0
            for number in numbers:
                value = int(number)**2
                n += value
            if n in number_appeared:
                return False
            number_appeared.add(n)
            
        return True

這里用到的數據結構就是set,其中的數據都不會重復。

Java

public class Solution {
    /**
     * @param n an integer
     * @return true if this is a happy number or false
     */
    public boolean isHappy(int n) {
        // Write your code here
        Set set=new HashSet();
        boolean signal = true;
        
        while (n != 1)
        {
            String numbers = "" + n;
            char[] list_number = numbers.toCharArray();
            n = 0;
            
            for(char number: list_number)
            {  
                int number_int = Character.getNumericValue(number);
                n += Math.pow(number_int,2);    
            }
            if (n == 1)
            {
                signal = true;
            }
            if (!set.contains(n))
            {
                set.add(n);
            }
            else
            {
                signal = false;
                n = 1;
            }
        }
        return signal;
    }
}

思路和之前一樣,只是java在語法上會和python有沖突:

  1. 這里的set數據結構是指hashset,它也有自己的內置函數。我這里用到了add 和 contains

  2. java中的次方表達要用到Math.pow 而沒有類似python的**。

  3. 最后是char 到int的shift,我的代碼中直接用了Character.getNumericValue(number)。java不似python有固定的數據類型變化格式,所以要格外注意。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容