Leetcode 每日一題 202.快樂數

目錄

題意

算法思路

過題圖片

算法實現

代碼解析

復雜度分析

題目鏈接

結論


題意

判斷正整數 n 是不是快樂數。

快樂數定義:

(1)每次將正整數替換為它每個位置上的數字的平方和。

(2)重復這個過程直到這個數變為 1,也可能是無限循環但始終變不到 1。

(3)如果可以變為 1,這個數就是快樂數。

示例
輸入:19

輸出:true

解釋:

12 + 92 = 82

82 + 22 = 68

62 + 82 = 100

12 + 02 + 02 = 1

提示
1 <= n <= 2^31 -1

算法思路

這個問題的關鍵在于處理可能的無限循環。如果一個數最終會進入一個循環,那么它肯定不是快樂數。因此,我們可以使用哈希集合來記錄在迭代過程中出現過的數。如果新生成的數已經在哈希集合中,那么我們可以確定這個數不是快樂數,因為它已經進入了循環。

過題圖片

算法實現

以下是使用Java語言實現的算法:

import java.util.Set;
import java.util.HashSet;class Solution {private int getNextNumber(int n) {int res = 0;while (n > 0) {int temp = n % 10;res += temp * temp;n = n / 10;}return res;}public boolean isHappy(int n) {Set<Integer> record = new HashSet<>();while (n != 1 && !record.contains(n)) {record.add(n);n = getNextNumber(n);}return n == 1;}
}

代碼解析

  1. getNextNumber 方法:這個方法用于計算給定數的下一個數,即每個位置上的數字的平方和。它通過不斷取模和除法操作來實現。

  2. isHappy 方法:這是主要的算法實現。我們使用一個哈希集合 record 來記錄出現過的數。在循環中,我們不斷計算下一個數,并檢查這個數是否已經在 record 中。如果已經在 record 中,說明進入了循環,返回 false。如果計算得到的數為1,說明找到了快樂數,返回 true

復雜度分析

  • 時間復雜度:最壞情況下,我們需要遍歷所有可能的數直到找到1或者確定循環。在最壞情況下,這個算法的時間復雜度是 O(k),其中 k 是快樂數序列的長度。對于非快樂數,時間復雜度取決于循環的長度,但在實際應用中,這個循環通常不會太長。

  • 空間復雜度:我們使用了一個哈希集合來存儲已經出現過的數,因此空間復雜度是 O(k),其中 k 是不同數的數量。

題目鏈接

202. 快樂數 - 力扣(LeetCode)

結論

通過使用哈希集合來記錄已經出現過的數,我們可以有效地判斷一個數是否為快樂數。這種方法簡單而高效,能夠處理可能的無限循環問題。

寫在最后
如果你覺得有幫助到你,請給題解點個贊和收藏,讓更多的人看到呀~

也歡迎你關注我,解鎖更多圖解 LeetCode,一起玩轉數據結構與算法!

我是luckilyil,我們下次見!

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

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

相關文章

【鴻蒙生態崛起】開發者如何把握機遇,應對挑戰,打造卓越應用體驗?

文章目錄 每日一句正能量前言鴻蒙簡析鴻蒙生態的認知和了解鴻蒙生態的崛起分析 鴻蒙生態下開發時遇到的挑戰開發工具不完善技術難度生態競爭抓住機遇、應對挑戰 鴻蒙生態未來的發展趨勢1. 全場景智慧生活的推動者2. 技術創新的引領者3. 開放合作的倡導者對鴻蒙生態和開發者的建…

Nignx部署Java服務測試使用的Spring Boot項目Demo

天行健&#xff0c;君子以自強不息&#xff1b;地勢坤&#xff0c;君子以厚德載物。 每個人都有惰性&#xff0c;但不斷學習是好好生活的根本&#xff0c;共勉&#xff01; 文章均為學習整理筆記&#xff0c;分享記錄為主&#xff0c;如有錯誤請指正&#xff0c;共同學習進步。…

文本域設置高度 加上文字限制并show出來:

文本域設置高度 :rows"4" 加上文字限制并show出來&#xff1a; maxlength"30" show-word-limit 效果: <el-form-item label"產品備注" prop"remark"><el-input v-model"form.remark" type"textarea"…

區塊鏈軟件系統海外宣發:全球化市場中的策略與實施

隨著區塊鏈技術的快速發展&#xff0c;越來越多的區塊鏈軟件系統進入全球市場&#xff0c;涉及加密貨幣、智能合約、去中心化金融&#xff08;DeFi&#xff09;、供應鏈管理等多個行業應用。為了在激烈的競爭中脫穎而出&#xff0c;區塊鏈軟件系統不僅需要具備卓越的技術能力&a…

springboot413福泰軸承股份有限公司進銷存系統(論文+源碼)_kaic

摘 要 使用舊方法對福泰軸承股份有限公司進銷存系統的信息進行系統化管理已經不再讓人們信賴了&#xff0c;把現在的網絡信息技術運用在福泰軸承股份有限公司進銷存系統的管理上面可以解決許多信息管理上面的難題&#xff0c;比如處理數據時間很長&#xff0c;數據存在錯誤不…

qiankun學習記錄

什么是微前端 微前端是指存在于瀏覽器中的微服務&#xff0c;其借鑒了微服務的架構理念&#xff0c;將微服務的概念擴展到了前端。 如果對微服務的概念比較陌生的話&#xff0c;可以簡單的理解為微前端就是將一個大型的前端應用拆分成多個模塊&#xff0c;每個微前端模塊可以…

配置中心 選型 : Apollo Vs. Nacos Vs. spring cloud config

為什么我們需要一個微服務配置中心&#xff1f; 首先&#xff0c;我們可以想象下&#xff0c;如果沒有配置中心&#xff0c;我們的項目可能是這樣的&#xff1a;不同環境的配置文件都放在項目里面&#xff0c;部署時可以通過啟動參數來指定使用哪個環境的配置。 這種方式有兩…

HarmonyOS(65) ArkUI FrameNode詳解

Node 1、Node簡介2、FrameNode2.1、創建和刪除節點2.2、對FrameNode的增刪改2.3、 FramNode的查詢功能3、demo源碼4、總結5、參考資料1、Node簡介 在HarmonyOS(63) ArkUI 自定義占位組件NodeContainer介紹了自定義節點復用的原理(閱讀本本篇博文之前,建議先讀讀這個),在No…

詳解RabbitMQ在Ubuntu上的安裝

??????? 目錄 Ubuntu 環境安裝 安裝Erlang 查看Erlang版本 退出命令 ?編輯安裝RabbitMQ 確認安裝結果 安裝RabbitMQ管理界面 啟動服務 查看服務狀態 通過IP:port訪問 添加管理員用戶 給用戶添加權限 再次訪問 Ubuntu 環境安裝 安裝Erlang RabbitMq需要…

vue圖片之放大、縮小、1:1、刷新、左切換、全屏、右切換、左旋咋、右旋轉、x軸翻轉、y軸翻轉

先上效果&#xff0c;代碼在下面 <template><!-- 圖片列表 --><div class"image-list"><img:src"imageSrc"v-for"(imageSrc, index) in images":key"index"click"openImage(index)"error"handleI…

【計算機網絡】實驗12:網際控制報文協議ICMP的應用

實驗12 網際控制報文協議ICMP的應用 一、實驗目的 驗證ping命令和tracert命令的工作原理。 二、實驗環境 Cisco Packet Tracer模擬器 三、實驗過程 1.構建網絡拓撲并進行信息標注&#xff0c;將所需要配置的IP地址寫在對應的主機或者路由器旁邊&#xff0c;如圖1所示。 圖…

迭代器模式的理解和實踐

引言 在軟件開發中&#xff0c;我們經常需要遍歷容器對象&#xff08;如數組、列表、集合等&#xff09;中的元素。如果每個容器對象都實現自己的遍歷算法&#xff0c;那么代碼將會變得冗余且難以維護。為了解決這個問題&#xff0c;迭代器模式應運而生。迭代器模式是一種行為型…

TS2339: Property ‘value‘ does not exist on type ‘MessageBoxData‘.

1、源代碼 <template><el-dialog:visible"visible":before-close"handleClose":close-on-click-modal"false"title"邀請碼"width"1200px"append-to-bodydestroy-on-close><div class"invite-code-wrap…

ubuntu防火墻(三)——firewalld使用與講解

本文是Linux下&#xff0c;用ufw實現端口關閉、流量控制(二) firewalld使用方式 firewalld 是一個動態管理防火墻的工具&#xff0c;主要用于 Linux 系統&#xff08;包括 Ubuntu 和 CentOS 等&#xff09;。它提供了一個基于區域&#xff08;zones&#xff09;和服務&#x…

Windows 安裝配置 RabbitMQ 詳解

博主介紹&#xff1a; 計算機科班人&#xff0c;全棧工程師&#xff0c;掌握C、C#、Java、Python、Android等主流編程語言&#xff0c;同時也熟練掌握mysql、oracle、sqlserver等主流數據庫&#xff0c;能夠為大家提供全方位的技術支持和交流。 工作五年&#xff0c;具有豐富的…

R語言的數據結構--矩陣

【圖書推薦】《R語言醫學數據分析實踐》-CSDN博客 《R語言醫學數據分析實踐 李丹 宋立桓 蔡偉祺 清華大學出版社9787302673484》【摘要 書評 試讀】- 京東圖書 (jd.com) R語言醫學數據分析實踐-R語言的數據結構-CSDN博客 矩陣是一個二維數組&#xff0c;矩陣中的元素都具有相…

JAVA基礎學習筆記_反射+動態代理

文章目錄 反射獲取class對象的三種方式獲取構造方法獲取成員變量獲取成員方法反射的作用 動態代理 反射 允許對成員變量\成員方法\構造方法的信息進行編程訪問 把類內的信息扒的干干凈凈,獲取解剖 獲取從class字節碼文件中獲取 獲取class對象的三種方式 public static void …

微信小程序一鍵復制功能

wx.setClipboardData(Object object) 設置系統剪貼板的內容。調用成功后&#xff0c;會彈出 toast 提示"內容已復制"&#xff0c;持續 1.5s wx.setClipboardData({data: 你需要復制的內容,success (res) {wx.getClipboardData({success (res) {console.log(res.dat…

【Python網絡爬蟲 常見問題匯總】

目錄 1. 爬取圖片出現403解決辦法&#xff1a;設置請求頭中的Referer字段 2.關于干壞事的問題后續不定期更新 歡迎共同探討學習進步 1. 爬取圖片出現403 問題出自案例9&#xff0c;已解決。 【Python網絡爬蟲筆記】9- 抓取優美圖庫高清壁紙 當在爬取圖庫圖片時遇到 403 錯誤…

Linux: docker: 怎么修改 proc下的文件內容?

文章目錄 參考問題方法 1:在宿主機上修改參數方法 2:啟動容器時掛載 /proc 為可寫方法 3:通過 Kubernetes 調整配置方法 4:構建特權容器參考 https://docs.docker.com/security/for-admins/hardened-desktop/enhanced-container-isolation/features-benefits/#procfs–sys…