天天看點

leetcode算法202.快樂數

哈喽!大家好,我是【學無止境小奇】,一位熱愛分享各種技術的部落客!

⭐【學無止境小奇】的創作宗旨:每一條指令都親自執行過,每一行代碼都實際運作過,每一種方法都真實實踐過,每一篇文章都良心制作過。✊✊✊

⭐【學無止境小奇】的部落格中所有涉及指令、代碼的地方,除了提供圖檔供大家參考,另外會在圖檔下方提供一份純文字格式的指令或者代碼友善大家粘貼複制直接執行指令或者運作代碼。

⭐如果你對技術有着濃厚的興趣,歡迎關注【學無止境小奇】,歡迎大家和我一起交流。

❤️❤️❤️感謝各位朋友接下來的閱讀❤️❤️❤️

文章目錄

  • ​​一、leetcode算法​​
  • ​​ 1、快樂數​​
  • ​​1.1、題目​​
  • ​​1.2、思路​​
  • ​​1.3、答案​​

一、leetcode算法

1、快樂數

1.1、題目

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

「快樂數」 定義為:

對于一個正整數,每一次将該數替換為它每個位置上的數字的平方和。

然後重複這個過程直到這個數變為 1,也可能是 無限循環 但始終變不到 1。

如果這個過程 結果為 1,那麼這個數就是快樂數。

如果 n 是 快樂數 就傳回 true ;不是,則傳回 false 。

示例 1:

輸入:n = 19

輸出:true

解釋:

12 + 92 = 82

82 + 22 = 68

62 + 82 = 100

12 + 02 + 02 = 1

示例 2:

輸入:n = 2

輸出:false

1.2、思路

思路一:此題我們首先要定義一個方法用來計算一個數n的每一位的平方和,然後循環調用它,将要計算的數輸入進去,将計算的結果放入一個set集合中,如果集合中出現重複的數并且不等于1,證明這個數不是快樂數,如果等于1那麼就是快樂數。

1.3、答案

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;
    }
}