日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

快乐数(Leetcode第202题)

發布時間:2025/3/15 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快乐数(Leetcode第202题) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

?

1.題目描述

2.分析

3.算法

4.代碼實現

5.知識點


1.題目描述

2.分析

此題可能會遇到三種情況:

其實第三種情況可以排除,舉個例子就知道了

3.算法

算法分為兩部分,我們需要設計和編寫代碼。

給一個數字 nn,它的下一個數字是什么?
按照一系列的數字來判斷我們是否進入了一個循環。
第 1 部分我們按照題目的要求做數位分離,求平方和。

第 2 部分可以使用哈希集合完成。每次生成鏈中的下一個數字時,我們都會檢查它是否已經在哈希集合中。

如果它不在哈希集合中,我們應該添加它。
如果它在哈希集合中,這意味著我們處于一個循環中,因此應該返回 false。

我們使用哈希集合而不是向量、列表或數組的原因是因為我們反復檢查其中是否存在某數字。檢查數字是否在哈希集合中需要 O(1)O(1) 的時間,而對于其他數據結構,則需要 O(n)O(n) 的時間。選擇正確的數據結構是解決這些問題的關鍵部分

4.代碼實現

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;}bool isHappy(int n) {unordered_set<int> set;//定義一個容器while (1) {int sum = getNext(n);if (sum == 1) {return true;}if (set.find(sum) != set.end()) {//判斷容器中是否存在,若存在則是無限循環,即需跳出循環return false;} else {set.insert(sum);//插入容器}n = sum;}} };

?

5.知識點

unordered_set 容器,可直譯為“無序 set 容器”,即 unordered_set 容器和 set 容器很像,唯一的區別就在于 set 容器會自行對存儲的數據進行排序,而 unordered_set 容器不會。

總的來說,unordered_set 容器具有以下幾個特性:

  • 不再以鍵值對的形式存儲數據,而是直接存儲數據的值;
  • 容器內部存儲的各個元素的值都互不相等,且不能被修改。
  • 不會對內部存儲的數據進行排序(這和該容器底層采用哈希表結構存儲數據有關)
  • 具體可參考網站:http://c.biancheng.net/view/7250.html

    總結

    以上是生活随笔為你收集整理的快乐数(Leetcode第202题)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。