[ Leetcode ]---快樂數

題目鏈接

Leetcode快樂數

題目描述

?

如下圖:?

?

題目解析:

?1.雙指針法

算法核心思路

判斷快樂數的關鍵挑戰是如何檢測是否進入無限循環。這里使用了快慢指針法(Floyd 循環檢測算法),這是一種高效檢測循環的技巧:

  1. 慢指針:每次計算一次數字的平方和(走一步)
  2. 快指針:每次計算兩次數字的平方和(走兩步)
  3. 如果是快樂數:最終都會收斂到 1,此時快慢指針會相遇在 1
  4. 如果不是快樂數:快慢指針會在某個非 1 的數字處相遇(檢測到循環)

算法執行流程示例

以非快樂數 11 為例,看看算法如何工作:

  1. 初始狀態:slow=11,fast=11
  2. 第一次循環:
    • slow = Sum(11) = 12 + 12 = 2
    • fast = Sum(Sum(11)) = Sum(2) = 4
    • 此時 slow≠fast,繼續循環
  3. 第二次循環:
    • slow = Sum(2) = 4
    • fast = Sum(Sum(4)) = Sum(16) = 12 + 62 = 37
    • 此時 slow≠fast,繼續循環
  4. 后續循環中,快慢指針會逐漸接近,最終在某個非 1 的數字相遇,此時返回 false

算法復雜度分析

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

    • 每次計算平方和時,數字的位數大約是 log??n
    • 快慢指針相遇前最多執行 O (log n) 次操作
  • 空間復雜度:O(1)

    • 只使用了常數個額外變量,沒有使用額外的數據結構

?

2.哈希表法?

使用哈希表(Hash Set)求解快樂數問題是另一種直觀且容易理解的方法。其核心思路是記錄每次計算得到的平方和,如果某個平方和重復出現,說明進入了循環,該數不是快樂數;如果最終得到 1,則是快樂數。?

哈希表解法思路?

1.計算數字的各位平方和?

2. 檢查該平方和是否為 1:

?????若是 1,返回 true(是快樂數)

???? 若不是 1,檢查該平方和是否已在哈希表中:?

  • 若已存在,說明進入循環,返回 false(不是快樂數)
  • 若不存在,將其加入哈希表,繼續計算下一個平方和?

?完整代碼:

代碼解析

  1. getSum 函數:與之前的 Sum 函數功能相同,計算一個數的各位數字平方和。

  2. isHappy 函數

    • 使用unordered_set<int> seen存儲已經出現過的數字
    • 循環計算平方和,直到結果為 1 或檢測到循環:
      • 若 n=1,返回 true(找到快樂數)
      • 若 n 已在哈希表中,返回 false(檢測到循環)
      • 否則將 n 加入哈希表,繼續計算下一個平方和

?

執行流程示例(以 19 為例)

  1. 初始 n=19,哈希表為空
  2. 19 不在哈希表中,加入哈希表,計算下一個值:12+92=82
  3. 82 不在哈希表中,加入哈希表,計算下一個值:82+22=68
  4. 68 不在哈希表中,加入哈希表,計算下一個值:62+82=100
  5. 100 不在哈希表中,加入哈希表,計算下一個值:12+02+02=1
  6. 此時 n=1,返回 true(19 是快樂數)

復雜度分析

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

    • 每次計算平方和處理 log??n 位數字
    • 最多處理 O (log n) 個不同的數字(因為平方和的增長有上限)
  • 空間復雜度:O(log n)

    • 最壞情況下,哈希表需要存儲 O (log n) 個不同的數字

?

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

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

相關文章

智慧社區構建——2

1.實現Token校驗## Token校驗URLjson GET /checkToken 參數json HttpServletRequest request 返回json {"msg": "操作成功","code": 200,"status": "ok" }{"msg": "操作成功","code": 200,&q…

K-Means聚類:當數據沒有標簽時,如何讓計算機自動“物以類聚”?

K-Means聚類&#xff1a;當數據沒有標簽時&#xff0c;如何讓計算機自動“物以類聚”&#xff1f;&#x1f44b; 大家好&#xff0c;我是小瑞瑞&#xff01;歡迎回到我的專欄&#xff01; 在我們之前的旅程中&#xff0c;解決的問題大多都有一個明確的“目標”&#xff0c;比如…

萬事皆可用 GeeLark AI

在今年4月&#xff0c;GeeLark AI 全面接入 DeepSeek AI 大模型&#xff0c;你可以在獨立窗口中便捷地使用 GeeLark AI。除了幫助你編寫文案等基礎內容&#xff0c;在使用 GeeLark 過程中&#xff0c;如果遇到問題&#xff0c;也可以通過詢問 GeeLark AI&#xff0c;及時獲取幫…

3D 高保真處理:聲網讓游戲聲音隨角色動作變化

傳統游戲的聲音體驗像老式收音機&#xff0c;不管聲源位置、距離和障礙物&#xff0c;僅靠左右聲道機械調音量&#xff0c;毫無方向感和空間感&#xff0c;如同蒙眼聽聲辨位。射擊游戲中敵人從左邊來&#xff0c;耳機卻兩邊同響且音量相近&#xff0c;讓人暈頭轉向&#xff1b;…

Nestjs框架: 請求生命周期與應用生命周期

概述 在 NestJS 框架中&#xff0c;中間件&#xff08;Middleware&#xff09;、管道&#xff08;Pipes&#xff09;、過濾器&#xff08;Filters&#xff09;、攔截器&#xff08;Interceptors&#xff09; 均屬于請求處理流程的核心組件&#xff0c;它們共同構成了 NestJS 的…

Nastool+cpolar:群暉NAS用戶的全場景影音自由方案

文章目錄前言1. 本地搭建Nastool2. nastool基礎設置3. 群暉NAS安裝內網穿透工具4. 配置公網地址小結5. 配置固定公網地址**第二版&#xff1a;技術整合與效率提升導向****第二版&#xff1a;技術整合與效率提升導向****第二版&#xff1a;技術整合與效率提升導向**Nastool與cpo…

從零開始:Kaggle 競賽實戰入門指南

一、Kaggle社區概述 Kaggle 是全球最大的數據科學和機器學習社區&#xff0c;由Anthony Goldbloom于2010年創立&#xff0c;2017年被Google收購。平臺專注于數據科學競賽、開源數據集共享、協作編程以及技能學習&#xff0c;吸引了從初學者到專業數據科學家的廣泛用戶群體。 …

sqli-labs:Less-16關卡詳細解析

1. 思路&#x1f680; 本關的SQL語句為&#xff1a; $uname".$uname."; $passwd".$passwd."; $sql"SELECT username, password FROM users WHERE username($uname) and password($passwd) LIMIT 0,1";注入類型&#xff1a;字符串型&#xff08;…

Lipschitz連續函數

Lipschitz function 一、說明 在數學分析中&#xff0c;Lipschitz連續性以德國 數學家 魯道夫利普希茨 (Rudolf Lipschitz)的名字命名&#xff0c;是函數一致連續性的強形式。直觀地說&#xff0c;Lipschitz連續函數的變化速度有限&#xff1a;存在一個實數&#xff0c;使得對于…

Dynamics 365 business central 與Shopify集成

Dynamics 365 Business Central&#xff08;簡稱 D365 BC&#xff09; 與 Shopify 的集成&#xff0c;能幫助企業實現前端電商平臺&#xff08;Shopify&#xff09;與后端 ERP 系統&#xff08;Business Central&#xff09;之間的無縫數據同步&#xff0c;是一種典型的 ERP 與…

TCP RTO 與丟包檢測

TCP RTO 是它 40 多年前唯一丟包檢測策略&#xff0c;也是當前最后的丟包檢測兜底策略&#xff0c;它幾乎從沒變過。 有個咨詢挺有趣&#xff0c;以其案例為背景寫篇隨筆。大致意思是&#xff0c;嫌 TCP RTO 太大&#xff0c;游戲場景丟包卡頓怎么辦&#xff1f;我提供了幾行代…

安裝php和配置環境變量

為了簡單方便&#xff0c;先下載vscode然后下載對應的php安裝包&#xff0c;然后配置環境變量&#xff0c;然后點擊運行即可下載對應版本的php&#xff0c;這個版本湊合用然后下載完之后解壓配置環境變量搜索環境變量將路徑添加到環境變量中然后打開vscode添加變量具體看實際路…

Rabbit MQ的消息模式-Java原生代碼

一.簡單模式1.1.核心邏輯生產者 → 隊列 → 單個消費者&#xff08;1:1 直連&#xff09;&#xff0c;消息被消費后自動從隊列刪除。1.2.關鍵特性無交換器&#xff08;其實使用的是默認交換機不是顯示指定&#xff09;&#xff0c;直接指定隊列 消息默認自動確認&#xff08;au…

【lucene】使用docvalues的案例

下面給出一段 可直接跑通 的 Lucene 8.5.0 示例代碼&#xff0c;演示如何1. 建索引時為兩個字段啟用 DocValues&#xff08;一個 NumericDocValues&#xff0c;一個 SortedDocValues&#xff09;&#xff1b; 2. 用 IndexSearcher 按 DocValues 排序&#xff1b; 3. 用 Facet…

IntelliJ IDEA 配置 Maven 阿里云鏡像加速源全流程

1. 為什么要加國內鏡像源&#xff1f;國內網絡訪問 Maven 中央倉庫經常超時、依賴下載極慢或失敗。配置阿里云等國內鏡像后&#xff0c;Java 項目依賴下載飛快&#xff0c;極大提升開發效率&#xff0c;是中國開發者必做優化&#xff01;2. 添加阿里云鏡像源的步驟&#xff08;…

【worklist】worklist的hl7、dicom是什么關系

HL7和DICOM在Worklist系統中是互補的關系&#xff0c;它們各自承擔不同的角色&#xff0c;但協同工作以實現完整的醫療信息系統集成。HL7與DICOM Worklist的關系1. 功能分工DICOM Worklist (Modality Worklist - MWL)主要用于影像設備獲取患者和檢查信息基于DICOM協議&#xff…

位運算-面試題01.01.判定字符是否唯一-力扣(LeetCode)

一、題目解析1、s[i]僅包含小寫字母2、字符串的長度為[0&#xff0c;100]二、算法原理解法1&#xff1a;哈希表用哈希表記錄s[i]的字符&#xff0c;如果有重復的&#xff0c;則返回false優化1&#xff1a;由于s[i]中只有小寫字母&#xff0c;所以可以創建一個int hash[26]的數組…

wsl /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28‘ not found

遇到的問題并沒有解決&#xff0c;這個 glibc-2.28 應該是安裝好了 Ubuntu18 問題描述&#xff1a;Ubuntu18 WSL 無法啟動 VS Code &#xff0c;因為node版本問題 rootUbuntu18:~# code . /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.28 not found (required by /root…

Windows系統ffmpeg.dll丟失怎么辦?從錯誤分析到永久修復的完整流程

您是否遇到過這樣的情況&#xff1a;打開心愛的視頻編輯軟件時&#xff0c;系統突然提示無法啟動此程序&#xff0c;因為計算機中丟失ffmpeg.dll&#xff1f;別擔心&#xff0c;這個問題比您想象的要常見得多。作為專業的技術支持團隊&#xff0c;我們已經幫助數千用戶解決了類…

LaTeX 復雜圖形繪制教程:從基礎到進階

系列文章目錄 第一章&#xff1a;深入了解 LaTeX&#xff1a;科技文檔排版的利器 第二章&#xff1a;LaTeX 下載安裝保姆級教程 第三章&#xff1a;LaTeX 創建工程并生成完整文檔指南 第四章&#xff1a;LaTeX 表格制作全面指南 文章目錄系列文章目錄前言一、?LaTeX 繪圖工具…