天天看點

LeetCode-202. 快樂數(java)

一、前言🔥

👨‍🎓作者:bug菌

✏️部落格:​​CSDN​​​、​​掘金​​等

💌公衆号:​​猿圈奇妙屋​​

🚫特别聲明:原創不易,轉載請附上原文出處連結和本文聲明,謝謝配合。

🙏版權聲明:文章裡可能部分文字或者圖檔來源于網際網路或者百度百科,如有侵權請聯系bug菌處理。

​​《每日一題LeetCode》​​給重新捯饬起來,隻為幫助小夥伴們,能順利上岸,收到自己心儀的offer,面試第一關, 就是算法題。因為我始終堅信,變強絕對不是一朝一夕,而是貴在長久堅持,持之以恒。是以,趕緊跟着bug菌的步伐卷起來吧⏰,變強從這一刻開始➕🧈。

       小夥伴們在批閱文章的過程中如果覺得文章對您有一絲絲幫助,還請别吝啬您手裡的贊呀,大膽的把文章點亮👍吧,您的點贊三連(收藏⭐️+關注👨‍🎓+留言📃)就是對bug菌我創作道路上最好的鼓勵與支援😘。時光不棄🏃🏻‍♀️,創作不停💕,加油☘️

二、題目描述🔥

題目:

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

說明:

「快樂數」 定義為:

        對于一個正整數,每一次将該數替換為它每個位置上的數字的平方和。然後重複這個過程直到這個數變為 1,也可能是 無限循環 但始終變不到 1。如果這個過程 結果為 1,那麼這個數就是快樂數。如果 n 是 快樂數 就傳回 true ;不是,則傳回 false 。

具體請看如下示例:

示例 1:

輸入:n = 19
輸出:true
解釋:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1      
LeetCode-202. 快樂數(java)

示例 2:

輸入:n = 2
輸出:false      
LeetCode-202. 快樂數(java)

提示:

  • ​1 <= n <= 2^31-1​

題目來源:​​LeetCode原題位址​​

題目難度:⭐⭐⭐

三、思路分析🔥

        當你看到這道題,你快樂嗎?反正我是知道如果我做不出來我肯定是不快樂的,是以我的快樂與不快樂而言,是建立在這道題之上的,是以我快樂我也得讓你們快樂,當你看到這段文字時,你們就應該要想到,看了我的解析,如果你還不快樂,那真得怪我。接下來,我給大家來講解一下這道題的具體解決思路吧。

        首先,在網上看到這麼一段結論,快樂數必定會收斂到1,1又是收斂的,因為1的平方還是1,若生成的一組數中有兩個重合(非1)的,那麼就會構成一種循環。而且題目中說了會[ 無限循環 ],那麼也就是說求和的過程中,sum會重複出現,要不然怎麼促就死循環的條件呢,這對解題很有幫助。

        是以我的思路就是:結合哈希來做是否循環,判斷這個sum是否會出現有重複的,如果有重複值就直接return false(既然出現重複,肯定就無限循環了,該數就肯定不是快樂數), 否則一直找,直到sum為1為止,是以相對而言,還是比較暴力,唯有暴力法深入人心。

四、算法實作🔥

AC代碼:

具體算法代碼實作如下:

class Solution {
   public boolean isHappy(int {

       //用于存儲每一次的sum值
        Set<Integer> record = new HashSet<>();

        //隻要不存在record中就接着求每個人數的平方和
        while (n != 1 && !record.contains(n)) {
            record.add(n);

            n = this.getNextSum(n);
        }
        return n == 1;
    }

    private int getNextSum(int {
        int res = 0;

        //依次疊加該數的每一位平方和
        while (n > 0) {
            int temp = n % 10;
            res += temp * temp;
            //找下一位。
            n = n / 10;
        }
        return      
LeetCode-202. 快樂數(java)

五、總結🔥

leetcode送出運作結果截圖如下:

LeetCode-202. 快樂數(java)

 複雜度分析:

  • 時間複雜度:O(logn)。
  • 空間複雜度:O(logn)。

       其實這道題,重點還是得仔細審題,很重要的線索【也可能是 無限循環 但始終變不到 1】,這就提示你要結合無限循環去想,若是找不到跳出循環的條件,那這道題說白了就廢了,總不能一直循環下去?是以無限循環着手,猜測肯定會出現某一sum值循環,這就構成了跳出循環的條件,隻需要用哈希集合來檢測循環即可,一旦出現sum值重複,那程式還沒傳回1,這就永遠也不可能會跳出循環傳回true的,因為這不是快樂數啊。

        是以解題一定要結合題意多審題,有些題就會給你點提示,畢竟是簡單題啊,是以不可能讓你寫不出來的,哈哈哈,反正我是這麼了解的。

       再者,解題道路千萬條,歡迎小夥伴們腦洞大開,如果你們有啥更好的想法或者思路,歡迎評論區告訴我哦,大家一起互相借鑒互相學習,方能成長的更快。

       好啦,以上就是本期的所有内容啦,咱們下期見咯。

  六、熱門推薦🔥

  1. ​​leetcode-9.回文數​​
  2. ​​leetcode-1.兩數之和​​
  3. ​​leetcode-13.羅馬數字轉整數​​
  4. ​​leetcode-14.最長公共字首​​
  5. ​​leetcode-20.有效的括号​​
  6. ​​leetcode-21.合并兩個有序連結清單​​
  7. ​​leetcode-26. 删除有序數組中的重複項​​

七、文末🔥

​​《每日一題LeetCode》​​,帶着你一塊兒刷題,專欄每一篇都附帶詳細解法,手把手帶你解題。

        一個人刷可能會覺得很累很難堅持,但是一群人刷就會覺得它是一件很有意義的事兒,互相督促互相鼓勵,一起變強。

       我是bug菌,一名想走👣出大山改變命運的程式猿。接下來的路還很長,都等待着我們去突破、去挑戰。來吧,小夥伴們,我們一起加油!未來皆可期,fighting!

最後送大家兩句話,與諸君共勉!

☘️做你想做的人,沒有時間限制,隻要願意,什麼時候都可以start,

🍀你能從現在開始改變,也可以一成不變,這件事,沒有規矩可言,你可以活出最精彩的自己。

LeetCode-202. 快樂數(java)

💌如果文章對您有所幫助,就請留下您的贊吧!(#^.^#);

💝如果喜歡bug菌分享的文章,就請給bug菌點個關注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果對文章有任何疑問,還請文末留言或者加群吧【QQ交流群:708072830】;

繼續閱讀