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

news2024/12/28 20:29:29

目录

    • 前言
    • 算法题(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.coloradmin.cn/o/507007.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GPIO实验【嵌入式系统】

GPIO实验【嵌入式系统】 前言推荐样例工程运行安装驱动安装驱动的问题工程配置工程运行 GPIO基础实验最后 前言 2023-5-9 14:41:36 以下内容源自《【嵌入式系统】》 仅供学习交流使用 推荐 周立功TinyM0开发板&#xff0c;通过CK100仿真器下载程序。win10系统&#xff01; …

本地部署 langchain-ChatGLM

本地部署 langchain-ChatGLM 1. 什么是 langchain-ChatGLM2. 什么是 langchain3. Github 地址4. 安装 Miniconda35. 创建虚拟环境6. 部署 langchain-ChatGLM7. 启动 langchain-ChatGLM8. 访问 langchain-ChatGLM9. API部署10. 命令行部署11. 其他&#xff0c;LangChain Documen…

深度学习—神经网络基础原理及循环神经网络

前向传播&#xff08;Forward&#xff09; 为什么要有激活函数 这里用两层来代表多层的神经网络举例&#xff1a;第一层的输出是第二层的输入&#xff0c;其中MM的W*X矩阵乘法&#xff0c;ADD是向量加法即加上偏置&#xff0c;如果每一层都只有线性变换&#xff0c;那么最终无…

RabbitMQ入门(详细)

RabbitMQ入门&#xff08;详细&#xff09; 初始消息队列消息队列初识为什么要使用消息队列&#xff1f;消息队列的特性 RabbitMQ介绍特点核心概念 Linux&#xff08;CentOs7&#xff09; 下安装&#xff1a;安装前配置&#xff1a;Erlang下载安装RabbitMQ下载安装linux下安装r…

泰安柒柒:国外问卷调查都有哪些题?

提到问卷调查我们并不陌生&#xff0c;它经常被用作调查市场、商品意见等多种调查中。不过&#xff0c;提到国外问卷调查&#xff0c;大家就比较陌生了。简单来说就是国外的一些企业或机构为了改进自己的商品或服务&#xff0c;会列出一些问题来让大众回答&#xff0c;并用付费…

配置 Ubuntu 的网络

一、三种联网的模式 1. 桥接 VMnet0------> 主机和 Ubuntu 都有一个 ip 地址 2. NAT 模式 VMnet8-------->Ubuntu 和主机是同一个 ip 地址 3. 主机模式 VMnet1-------> 只能和主机进行通信 二、网络配置 1. 虚拟机----->设置 2. 确保网络适配器是桥接模式或…

网络基础学习:osi网络七层模型

osi网络七层模型 什么是OSI&#xff0c;什么是ISO?为什么ISO要提出OSI网络七层模型&#xff1f;OSI七层的划分以及具体内容第七层 应用层第六层 表示层第五层 会话层第四层 传输层第三层 网络层第二层 数据链路层第一层 物理层 每一层与设备的对应关系 什么是OSI&#xff0c;什…

央国企专场培训:太极信创研习院第33期ITAIP信创精华班培训在常州成功举办

4月25-27日&#xff0c;由太极计算机股份有限公司&#xff08;太极信创研习院&#xff09;联合中国中车集团有限公司&#xff08;科技质量与信息化部&#xff09;、中车信息技术有限公司&#xff08;中车学习培训发展中心&#xff09;共同举办的“信息技术应用创新专业人员&…

Java并发编程实践学习笔记(三)——共享对象之可见性

目录 1 过期数据 2 非原子的64位操作 3 锁和可见性 4 Volatile变量&#xff08;Volatile Variables&#xff09; 在单线程环境中&#xff0c;如果向某个变量写入值&#xff0c;在没有其他写入操作的情况下读取这个变量&#xff0c;那么总能得到相同的值。然而&…

java状态机实现订单状态转移

一、状态机 状态机是状态模式的一种应用&#xff0c;相当于上下文角色的一个升级版。在工作流或游戏等各种系统中有大量使用&#xff0c;如各种工作流引擎&#xff0c;它几乎是状态机的子集和实现&#xff0c;封装状态的变化规则。状态机可以帮助开发者简化状态控制的开发过程…

APP界面设计都有哪些好用的软件推荐

基于APP界面的不同功能&#xff0c;所选择的APP界面设计软件也会有所不同。然而&#xff0c;并不是说所有的APP界面设计软件都非常精通&#xff0c;熟练地学习几个常用的APP界面设计软件。以下10个APP界面设计软件将为您的团队提供绘制APP界面所需的必要功能。 1.即时设计 即…

OpenCV-Python实战(7) —— OpenCV 实现抖音视频倒放效果

1. 需求分析 参考&#xff1a;十行Python代码制作一个视频倒放神器&#xff0c;由于最近在学习 OpenCV &#xff0c;因此试着使用 OpenCV 进行实现&#xff0c;学以致用&#xff08;胡乱折腾&#xff09;。 需要视频倒放&#xff0c;因此需要读取视频cv.VideoCapture&#xff1…

一键docker搭建mysql主从环境

一键docker搭建mysql主从环境 初衷准备阶段操作阶段注意事项 初衷 一开始为了玩一下shared-jdbc&#xff0c;要搭Mysql主从环境&#xff0c;这玩意虽然搭好&#xff0c;之后使用要是网络问题&#xff0c;或者sql执行出错&#xff0c;还得重新调Binlog位置&#xff0c;麻烦得很…

接口自动化测试之HTTP协议详解(敢称全网最全)

目录 协议 OSI模型 HTTP URL 报文 响应报文 HTTP扩展 协议 简单理解&#xff0c;计算机与计算机之间的通讯语言就叫做协议&#xff0c;不同的计算机之间只有使用相同的协议才能通信。所以网络协议就是为计算机网络中进行数据交换而建立的规则&#xff0c;标准或约定的集…

Node.js 使用RSA加密/解密

在本文中&#xff0c;我们将探讨如何在 Node.js 中使用 RSA 加密和解密。RSA 是一种非对称加密算法&#xff0c;它可以确保数据的安全传输。使用 RSA&#xff0c;我们可以在不直接传输密钥的情况下安全地加密和解密数据。 一、安装依赖 我们将使用 node-rsa 库来执行加密和解密…

2023 年Java经典面试题,基础篇01(持续更新)

本篇文章主要讲的是 2023 年Java最新面试题&#xff0c;持续更重中 基础概念与常识 原文地址&#xff1a;https://github.com/Snailclimb/JavaGuide Java 语言有哪些特点? 简单易学&#xff1b;面向对象&#xff08;封装&#xff0c;继承&#xff0c;多态&#xff09;&#…

《LeetCode》—— LeetCode刷题日记

本期&#xff0c;我给大家讲述的是关于 n数之和这类题目的讲解&#xff0c;我会给大家讲解两数之和&#xff0c;三数之和和四数之和这三道题目。 目录 &#xff08;一&#xff09;两数之和 &#xff08;二&#xff09;三数之和 &#xff08;三&#xff09;四数之和 &#xf…

NodeJs 最近各版本特性汇总

&#xff08;预测未来最好的方法就是把它创造出来——尼葛洛庞帝&#xff09; NodeJs 官方链接 github链接 V8链接 Node.js发布于2009年5月&#xff0c;由Ryan Dahl开发&#xff0c;是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;使用了一个事件驱动、非阻塞式I/O模…

对象应用:C++字符串和vector,对象的new与delete重构

对象应用 C字符串和vector字符串创建方式字符串拼接字符串追加 字符串截断autovector创建方式vector操作 new与delete重构new与delete的工作步骤new与delete重构应用只能生成栈对象只能生成堆对象 C字符串和vector C的字符串是一个对象&#xff0c;存在于std标准库中&#xff0…

Python基础入门(4)—— 什么是偷懒编程法?是类、对象和继承

文章目录 00 | &#x1f603;为什么学习类&#xff1f;&#x1f603;01 | &#x1f604;创建类&#x1f604;02 | &#x1f606;创建对象&#x1f606;03 | &#x1f609;访问对象属性和方法&#x1f609;04 | &#x1f60a;构造函数&#x1f60a;05 | &#x1f60b;继承&#…