【LeetCode】202. 快樂數

202. 快樂數

難度:簡單

題目

編寫一個算法來判斷一個數 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 <= n <= 23^1 - 1

個人題解

方法一:模擬

一開始想先寫出最簡單的方式,嘗試打表找規律,打表發現沒規律0.0

思路:

  1. 本題主要是要解決 無限循環 的問題,用 hashSet 容器存儲已經考慮過的數字便可得到,當再次算回容器中數字便表示將會 無限循環,返回 false 即可
class Solution {public boolean isHappy(int n) {HashSet<Integer> set = new HashSet<>();set.add(n);while (n != 1) {int sum = 0;while (n >= 10) {sum += (int) Math.pow(n % 10, 2);n /= 10;}n = sum + n * n;if (set.contains(n)) {return false;}set.add(n);}return true;}
}

復雜度分析

  • 時間復雜度:O(log n)
  • 空間復雜度:O(log n)

官方題解

方法一:用哈希集合檢測循環

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

復雜度分析

  • 時間復雜度:O(log n)
  • 空間復雜度:O(log n)
方法二:快慢指針法

通過反復調用 getNext(n) 得到的鏈是一個隱式的鏈表。隱式意味著我們沒有實際的鏈表節點和指針,但數據仍然形成鏈表結構。起始數字是鏈表的頭 “節點”,鏈中的所有其他數字都是節點。next 指針是通過調用 getNext(n) 函數獲得。

意識到我們實際有個鏈表,那么這個問題就可以轉換為檢測一個鏈表是否有環。因此我們在這里可以使用弗洛伊德循環查找算法。這個算法是兩個奔跑選手,一個跑的快,一個跑得慢。在龜兔賽跑的寓言中,跑的慢的稱為 “烏龜”,跑得快的稱為 “兔子”。

不管烏龜和兔子在循環中從哪里開始,它們最終都會相遇。這是因為兔子每走一步就向烏龜靠近一個節點(在它們的移動方向上)。

我們不是只跟蹤鏈表中的一個值,而是跟蹤兩個值,稱為快跑者和慢跑者。在算法的每一步中,慢速在鏈表中前進 1 個節點,快跑者前進 2 個節點(對 getNext(n) 函數的嵌套調用。

如果 n 是一個快樂數,即沒有循環,那么快跑者最終會比慢跑者先到達數字 1

如果 n 不是一個快樂數,那么最終快跑者和慢跑者將在同一個數字上相遇。

class Solution {public 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) {int slowRunner = n;int fastRunner = getNext(n);while (fastRunner != 1 && slowRunner != fastRunner) {slowRunner = getNext(slowRunner);fastRunner = getNext(getNext(fastRunner));}return fastRunner == 1;}
}
  • 復雜度分析

    • 時間復雜度:O(log n)
    • 空間復雜度:O(1)

作者:力扣官方題解
鏈接:https://leetcode.cn/problems/happy-number/solutions/224894/kuai-le-shu-by-leetcode-solution/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/206856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/206856.shtml
英文地址,請注明出處:http://en.pswp.cn/news/206856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高校網站建設的效果如何

高校有較高的信息承載需求、招生宣傳、學校內容呈現、內部消息觸達等需求&#xff0c;對高校來說&#xff0c;如今互聯網深入生活各個場景&#xff0c;無論學校發展、外部拓展還是內部師生互動、通知觸達等都需要完善。 除了傳統傳單及第三方平臺展示外&#xff0c;學校構建屬…

C#-數組池減少GC工作

數組池減少GC工作 通過ArrayPool類&#xff08;名稱空間System.Buffers&#xff09;使用數組池&#xff0c;可減少垃圾收集器的工作&#xff0c;ArrayPool管理一個數組池&#xff0c;數組可以從這租借&#xff0c;并返回池中&#xff0c;內存在ArrayPool中管理。 創建ArrayPool…

Html5響應式全開源網站建站源碼系統 附帶完整的搭建教程

Html5響應式全開源網站建站源碼系統是基于Html5、CSS3和JavaScript等技術開發的全開源網站建站系統。它旨在為初學者和小型企業提供一套快速、簡便的網站建設解決方案。該系統采用響應式設計&#xff0c;可以自適應不同設備的屏幕大小&#xff0c;提高用戶體驗。同時&#xff0…

Clean My Mac X2024解鎖完整版本

Clean My Mac X是Mac上一款美觀易用的系統優化清理工具&#xff0c;也是小編剛開始用Mac時的裝機必備。垃圾需要時時清&#xff0c;電腦才能常年新。Windows的垃圾清理工具選擇有很多&#xff0c;但是Mac的清理工具可選擇的就很少。 今天給大家推薦大名鼎鼎的Clean My Mac X&a…

elasticsearch-head 啟動教程

D:\elasticsearch-head-master>grunt server ‘grunt’ 不是內部或外部命令&#xff0c;也不是可運行的程序 或批處理文件。 npm install -g grunt-clinpm install

Leetcode—190.顛倒二進制位【簡單】

2023每日刷題&#xff08;五十二&#xff09; Leetcode—190.顛倒二進制位 算法思路 實現代碼 class Solution { public:uint32_t reverseBits(uint32_t n) {uint32_t res 0;for(int i 0; i < 32 && n > 0; i) {res | (n & 1) << (31 - i);n >&…

【華為數據之道學習筆記】1-1非數字原生企業的特點

非數字原生企業的數字化轉型挑戰 軟件和數據平臺為核心的數字世界入口&#xff0c;便捷地獲取和存儲了大量的數據&#xff0c;并開始嘗試通過機器學習等人工智能技術分析這些數據&#xff0c;以便更好地理解用戶需求&#xff0c;增強數字化創新能力。部分數字原生企業引領著云計…

第二十一章,網絡通信

網絡協議 IP協議 IP是Internet Protocol的簡稱&#xff0c;是一種網絡協議。Internet 網絡采用的協議是TCP/IP協議&#xff0c;其全稱是Transmission Control Protocol/Internet Protocol。Internet 依靠TCP/IP協議&#xff0c;在全球范圍內實現了不同硬件結構、不同操作系統…

淺談Android 14適配

引言 距離 Android 14 發布已經有一段時間了&#xff0c;趁著這次機會&#xff0c;了解和熟悉了 Android 14 更新的內容&#xff0c;現在來和大家分享一下&#xff0c;大家喜歡的話可以點個贊多多支持一下&#xff0c;文章的內容按照適配內容的重要程度進行排序。 targetSdk …

機器學習實戰:預測波士頓房價

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天來學習一下機器學習中一個非常經典的案例&#xff1a;預測波士頓房價&#xff0c;在此過程中也會補充很多重要的知識點&#xff0c;歡迎大家一起前來探討學習~ 一、導入數據 在這個項目中&#xff0c;我們利用馬薩諸…

python-根據文件名移動已處理的文件

假設NC文件所在的文件夾為"nc_files"&#xff0c;CSV文件所在的文件夾為"csv_files"&#xff0c;目標文件夾為"target_folder"&#xff1a; import os import shutilnc_folder nc_files csv_folder csv_files target_folder target_folder# …

SAP UI5 walkthrough step4 XML Views

SAPUI5 指出多種VIEW類型&#xff0c;包括XML,HTML,JavaScript 推薦使用XML&#xff0c;因為可讀性更高 我們提前介紹一下MVC架構。 MVC是一種軟件架構模式&#xff0c;它包括三個主要組件&#xff1a;模型&#xff08;Model&#xff09;、視圖&#xff08;View&#xff09;…

element el-pagination solt 使用

起初只是想修改一下&#xff0c;共多少條的顏色&#xff0c;和跳轉至 發現并不支持 網上找通過js修改&#xff0c;因為我這是在 dialog里面的 好像并不能適用 mounted() {document.getElementsByClassName("el-pagination__jump")[0].childNodes[0].nodeValue &quo…

企業集團采購系統(供應商、詢價、招投標)-源碼

一、業務需求 企業招標詢價供應商管理系統是一種專業的采購管理系統&#xff0c;旨在幫助企業實現供應商關系的管理和采購成本的控制。該系統涵蓋了企業采購管理的各個方面&#xff0c;包括采購預算、供應商管理、產品管理、采購計劃、詢價、競價、招標、采購訂單、采購合同執…

Python零基礎入門之詳解sort排序使用

文章目錄 1.前言2.環境準備3.程序實現4.sort拓展關于Python技術儲備一、Python所有方向的學習路線二、Python基礎學習視頻三、精品Python學習書籍四、Python工具包項目源碼合集①Python工具包②Python實戰案例③Python小游戲源碼五、面試資料六、Python兼職渠道 1.前言 昨天一…

低代碼平臺選型標準:功能、應用與優劣勢分析

在數字化轉型的浪潮下&#xff0c;中小企業面臨滿足市場需求、提高效率和競爭力的挑戰。低代碼平臺做為數字化轉型的重要工具&#xff0c;為中小企業帶來了快速開發和定制應用程序解決方案。但是&#xff0c;在很多低代碼平臺中&#xff0c;選擇是一個重要的環節。企業應該根據…

Linux學習教程(第十一章 Linux高級文件系統管理)二

第十一章 Linux高級文件系統管理&#xff08;二&#xff09; 九、Linux如何判斷磁盤配額是否生效&#xff1f; 我們的磁盤配額已經生效&#xff0c;接下來測試一下是否會限制我們的用戶。以 lamp1 用戶為例&#xff0c; 因為 lamp1 用戶除容量被限制外&#xff0c;也限制了文…

如何選擇靠譜的軟件測試外包公司?CMA、CNAS軟件測試報告獲取

作為信息科技產業的代表之一&#xff0c;軟件公司受到了越來越多的關注&#xff0c;它們的發展為我國的科技創新提供了強大的戰略支撐。軟件測試作為提升軟件產品質量的后盾&#xff0c;日益成為一個專業化、標準化和規范化的行業&#xff0c;軟件測試外包公司就是這種背景下成…

免費接口匯總,為程序員節省開發成本

最近整理的好用免費API接口&#xff0c;趕緊收藏起來吧&#xff01; 短信驗證碼&#xff1a;可用于登錄、注冊、找回密碼、支付認證等等應用場景。支持三大運營商&#xff0c;3秒可達&#xff0c;99.99&#xff05;到達率&#xff0c;支持大容量高并發。通知短信&#xff1a;當…