欢迎访问 生活随笔!

生活随笔

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

编程问答

快乐数(Leetcode第202题)

发布时间:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的这篇文章主要介绍了 快乐数(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题)的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。