快乐数(Leetcode第202题)
生活随笔
收集整理的這篇文章主要介紹了
快乐数(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题)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: __name__ == '__main_
- 下一篇: eclipse一套全部流程的安装及配置