看完这篇文章你就彻底懂啦{保姆级讲解}-----(LeetCode刷题202快乐数) 2023.5.9

news/2025/1/2 2:59:10/

目录

    • 前言
    • 算法题(LeetCode刷题202快乐数)—(保姆级别讲解)
      • 分析题目
      • 算法思想(使用unordered_set实现哈希表)
    • 结束语

前言

本文章一部分内容参考于《代码随想录》----如有侵权请联系作者删除即可,撰写本文章主要目的在于记录自己学习体会并分享给大家,全篇并不仅仅是复制粘贴,更多的是加入了自己的思考,希望读完此篇文章能真正帮助到您!!!

算法题(LeetCode刷题202快乐数)—(保姆级别讲解)

力扣题目链接

在这里插入图片描述

分析题目

  1. 题目中说了会无限循环,那么也就是说在求和过程中,sum会重复出现,则我们可以联想到可以通过判断sum这个元素是否出现在集合里,如果sum重复出现了,则代表该数肯定不是快乐数,即我们可以联想到哈希法来判断。
  2. 既然我们选择用哈希法来判断,则我们需要选择使用哪种数据结构来构建哈希表,由于最终集合里是保证元素不能重复,所以我们采用unordered_set

算法思想(使用unordered_set实现哈希表)

class Solution {
public:int getSum(int n) {int sum = 0;while (n) {sum += (n % 10) * (n % 10);n /= 10;}return sum;}bool isHappy(int n) {unordered_set<int> set;while(1) {int sum = getSum(n);if (sum == 1) {return true;}if (set.find(sum) != set.end()) {return false;} else {set.insert(sum);}n = sum;}}
};

好!按照老样子,接下来开始详细讲解每行代码的用处,以及为什么这样写

int getSum(int n) {int sum = 0;while (n) {sum += (n % 10) * (n % 10);n /= 10;}return sum;}

这个函数的作用是取得数值各个位上的单数平方之和。那么重点肯定是如何求得各个位的数值。

在这里举个例子,假设n = 123,则我们取得个位的方法为n%10,即123%10 = 3,那么在下一次取得十位的方法为n/10,即123/10 = 12,以此类推,12%10 = 212/10=11%10 = 11/10 = 0。至此,退出while循环。

unordered_set<int> set;

由于我们选择使用unordered_set实现哈希表,即为我们最终遍历的集合,该集合名称为set

int sum = getSum(n);

获得了该每一位的平方和,并且赋值为sum

if (sum == 1) {return true;}

如果直接求和之后等于1,即代表为快乐数,不用再迭代了,直接返回。

if (set.find(sum) != set.end()) {return false;} else {set.insert(sum);}

unordered_set::find()函数是C++ STL中的内置函数,用于在容器中搜索元素。如果找到指定元素,它返回元素的迭代器,如果找不到指定元素,则返回指向unordered_set::end()的迭代器。所以判断与set.end()是否相等即可。

如果不相等,则代表集合中有相同的元素,即代表sum重复了,则代表该num肯定不是快乐数。

如果相等,则代表找不到指定元素,则我们为了再下一次循环迭代过程中,比较sum值,我们需要将该sum值添加到集合set中。

 n = sum;

sum赋值给n,方便下一次计算新的sum值。

结束语

如果觉得这篇文章还不错的话,记得点赞 ,支持下!!!


http://www.ppmy.cn/news/65940.html

相关文章

Java版本的工程项目管理系统源代码之工程项目管理系统面临的挑战

​ ​工程项目管理系统是指从事工程项目管理的企业&#xff08;以下简称工程项目管理企业&#xff09;受业主委托&#xff0c;按照合同约定&#xff0c;代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 ​系统定义 工程项目管理企业不直接与该工程项目的总承包…

《程序员面试金典(第6版)》面试题 16.20. T9键盘(哈希映射,C++)

题目描述 在老式手机上&#xff0c;用户通过数字键盘输入&#xff0c;手机将提供与这些数字相匹配的单词列表。每个数字映射到0至4个字母。给定一个数字序列&#xff0c;实现一个算法来返回匹配单词的列表。你会得到一张含有有效单词的列表。&#xff08;原题链接&#xff09; …

在 oracle 中执行 sql 语句时,报错:“ORA-00001: 违反唯一约束条件 SYS_C0024202”

在 oracle 中执行 sql 语句时&#xff0c;报错&#xff1a;“ORA-00001: 违反唯一约束条件 SYS_C0024202” 报错信息如下&#xff1a; 表为“WK_ADMIN_USER” 解决方法&#xff1a; 1、查看违反约束的序列对应的数据库表与字段 select a.constraint_name,a.constraint_type,b…

8. 类的静态成员

一、对象的生产期 生存期&#xff1a;对象从诞生到结束的这段时间生存期分为静态生存期和动态生存期 1.1 静态生存期 对象的生存期与程序的运行期相同&#xff0c;则称它具有静态生存期在文件作用域中声明的对象都是具有静态生存期的若在函数内部的局部作用域中声明具有静态…

opencv_c++学习(六)

一、视频加载与摄像头调用 视频、摄像头加载 VideoCapture(filename, CAP_ANY)对以上实例解释如下&#xff1a; 若读取的为本地视频&#xff0c;则filename为视频名称&#xff0c;若读取的是摄像头数据&#xff0c;则为int类型的摄像头id。 视频属性的获取 视频属性可以通过…

OpenGL超级宝典第七章学习笔记:顶点处理与绘图命令

前言 本篇在讲什么 OpenGL蓝宝书第七章学习笔记 本篇适合什么 适合初学OpenGL的小白 本篇需要什么 对C语法有简单认知 对OpenGL有简单认知 最好是有OpenGL超级宝典蓝宝书 依赖Visual Studio编辑器 本篇的特色 具有全流程的图文教学 重实践&#xff0c;轻理论&…

vue+elementui+nodejs校园高校餐厅点餐及订餐菜品推荐评价系统6927k

传统的销售模式&#xff0c;在实体店的紧跟式的销售模式&#xff0c;会给消费者一种不自由&#xff0c;被监视的感觉。餐厅点餐及推荐系统&#xff0c;紧跟数据时代的步伐&#xff0c;使用nodejs开发语言&#xff0c;配备MySQL数据库。扎根于实际问题所开发出来的一套系统。这个…

一百一十、Hive时间转换——from_unixtime踩坑(不要用from_unixtime,而是用from_utc_timestamp)

1.详情 从kettle转换任务得到时间戳为13位&#xff0c;1683701579457。想看看这个时间戳与createTime字段的关系&#xff0c;于是一开始使用了from_unixtime&#xff0c;结果踩坑了 2.运行问题&#xff08;晚8个小时&#xff09; hive> select from_unixtime(cast(1683701…