LeetCode刷題實戰202:快樂數

算法的重要性,我就很少說了吧,想去大廠,就必需要通過基礎知識和業務邏輯面試+算法面試。因此,爲了提升你們的算法能力,這個公衆號後續天天帶你們作一道算法題,題目就從LeetCode上面選 !   今天和你們聊的問題叫作  快樂數,咱們先來看題面: https://leetcode-cn.com/problems/happy-number/

Write an algorithm to determine if a number n is happy.面試

題意

  編寫一個算法來判斷一個數 n 是否是快樂數。 「快樂數」定義爲: 對於一個正整數,每一次將該數替換爲它每一個位置上的數字的平方和。 而後重複這個過程直到這個數變爲 1,也多是 無限循環 但始終變不到 1。 若是 能夠變爲  1,那麼這個數就是快樂數。 若是 n 是快樂數就返回 true ;不是,則返回 false 。

示例

示例 1

輸入:19
輸出:true
解釋:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

示例 2

輸入:n = 2
輸出:false算法

 

解題

對於全部數字,會有三種狀況 1. 快樂數 2. 無限循環不快樂數 3. 無限不循環不快樂數 其中,不循環不快樂書不是絕對不循環,好比 2 , 算算就知道一直會在 4 以後循環. 可是 4 就會在自己開始, 循環.   思路:創建 set 表,每次獲得的數值都須要查閱是否出現過,出現過就說明死循環了  

class Solution {
    private int getNext(int n) {
        int totalSum = 0;
        while (n > 0) {
            int d = n % 10;
            n = n / 10;
            totalSum += d * d;
        }
        return totalSum;
    }

    public boolean isHappy(int n) {
        Set<Integer> seen = new HashSet<>();
        while (n != 1 && !seen.contains(n)) {
            seen.add(n);
            n = getNext(n);
        }
        return n == 1;
    }
}app