快乐数(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一套全部流程的安装及配置