代码随想录:快乐数
代码随想录:快乐数
这题主要是学习一下几种set怎么用。
三种set,第一种第二种都是有序的,注意这个序列和插入序列无关,只和插入元素本身有关。
第三种哈希表,无序,如果只需要找元素是否出现过,用第三种刚刚好。
| 集合 | 底层实现 | 是否有序 | 数值是否可以重复 | 能否更改数值 | 查询效率 | 增删效率 | 
|---|---|---|---|---|---|---|
| std::set | 红黑树 | 有序 | 否 | 否 | O(log n) | O(log n) | 
| std::multiset | 红黑树 | 有序 | 是 | 否 | O(logn) | O(logn) | 
| std::unordered_set | 哈希表 | 无序 | 否 | 否 | O(1) | O(1) | 
定义:
set<int>s
multiset<int>s
unordered_set<int> s
基本操作
s.insert()
s.erase()
//值得一提的是查找元素,用到了迭代器,但我懒得系统学,遇到一个记一个吧
s.find(3) != s.end()
//妈的查了一下也可以不用
s.count(3)即可
题目总代码
class Solution {
public:
    bool isHappy(int n) {
        set<int> s;
        while(1){
            if(n==1){return true;}
            n = getSum(n);
            if(s.find(n)!=s.end()){
                return false;
            }else{
                s.insert(n);
            }
        }
    }
    int getSum(int n) {
        int sum = 0;
        while (n != 0) {
            sum += (n % 10) * (n % 10);
            n = n / 10;
        }
        return sum;
    }
};

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号