Leetcode202. 快乐数

c/c++循环结构例题 (力扣LeetCode 202.快乐数) 题目链接: 力扣 202.快乐数 不想戳的看下图: 解题思路1: 比较基础的思想,直接循环100得出结果,但是,时间复杂度会很高。这里不建议使用。 解题思路2: 使用 “快慢指针” 思想,找出循环:“快指针” 每次走两步,“慢指针” 每次走一步,当二者相等时,即为一个循环周期。此时,判断是不是因为 1 引起的循环,是的话就是快乐数,否则不是快乐数。 注意:此题不建议用集合记录每次的计算结果来判断是否进入循环,因为这个集合可能大到无法存储;另外,也不建议使用递归,同理,如果递归层次较深,会直接导致调用栈崩溃。 阅读详情

Every day a leetcode

题目来源:202. 快乐数

解法1:hash

根据几个例子,我们发现只有2种结果:

  1. 最终会得到1
  2. 最终进入一个循环

其实得到1后,继续计算(将该数替换为它每个位置上的数字的平方和)也是得到1,相当于进入1的循环。

由此可以看出,计算结果一定得到一个循环。

一个数是否是快乐数,取决于循环的入口是不是1。

我们使用STL容器unordered_map作为哈希表。

代码:

/*
 * @lc app=leetcode.cn id=202 lang=cpp
 *
 * [202] 快乐数
 */

// @lc code=start
class Solution
{
public:
    int getNext(int n)
    {
        int sum = 0;
        while (n > 0)
        {
            int x = n % 10;
            sum += x * x;
            n /= 10;
        }
        return sum;
    }
    bool isHappy(int n)
    {
        unordered_map<int, bool> umap;
        while (n != 1 && umap.find(n) == umap.end())
        {
            umap.insert(pair<int, bool>(n, true));
            n = getNext(n);
        }
        return n == 1;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

在这里插入图片描述

解法2:快慢指针

通过反复调用getNext(n)得到的链是一个隐式的链表。隐式意味着我们没有实际的链表节点和指针,但数据仍然形成链表结构。起始数字是链表的头 “节点”,链中的所有其他数字都是节点。next指针是通过调用 getNext(n) 函数获得。

意识到我们实际有个链表,那么这个问题就可以转换为检测一个链表是否有环。因此我们在这里可以使用弗洛伊德循环查找算法。这个算法是两个奔跑选手,一个跑的快,一个跑得慢。在龟兔赛跑的寓言中,跑的慢的称为 “乌龟”,跑得快的称为 “兔子”。

不管乌龟和兔子在循环中从哪里开始,它们最终都会相遇。这是因为兔子每走一步就向乌龟靠近一个节点(在它们的移动方向上)。

在这里插入图片描述

使用 “快慢指针” 思想,找出循环:“快指针” 每次走两步,“慢指针” 每次走一步,当二者相等时,即为一个循环周期。此时,判断是不是因为 1 引起的循环,是的话就是快乐数,否则不是快乐数。

注意:此题不建议用集合记录每次的计算结果来判断是否进入循环,因为这个集合可能大到无法存储;另外,也不建议使用递归,同理,如果递归层次较深,会直接导致调用栈崩溃。不要因为这个题目给出的整数是 int 型而投机取巧。

初始化快指针fast为n,慢指针slow为n。

fast = getNext(getNext(fast));
slow = getNext(slow);

最后判断fast是否为1。

代码:

class Solution
{
public:
    int getNext(int n)
    {
        int sum = 0;
        while (n > 0)
        {
            int x = n % 10;
            sum += x * x;
            n /= 10;
        }
        return sum;
    }
    bool isHappy(int n)
    {
        int fast = n, slow = n;
        do
        {
            fast = getNext(getNext(fast));
            slow = getNext(slow);
        } while (fast != slow);
        return fast == 1;
    }
};

结果:

在这里插入图片描述

复杂度分析:

在这里插入图片描述

leetcode java解答答案 leetcode java解答答案、以供参考,刷leetcode的同学长刷长新,感觉开阔编程思路很赞啊 立即下载

相关推荐

同花顺Supermind量化交易 风险控制建模--海龟交易法则

A.市场与标的海龟交易法则应用于流动性高的市场中,选择交易量较大的标的进行交易。本文以沪深300指数ETF为标的,构建海龟交易法则。B、仓位:仓位是海龟交易系统最核心的部分,通过ATR真实波幅指标来管理仓位。第一步:计算True Range,简称TR。TR = Max ( H−L , H−P , P−L ) ,其中H为当日日内最高价,L为当日日内最低价,P为前一日收盘价。第二步:计算ATRATR = mean ( TR , 20 ) , 即计算过去20天的TR的平均值,ATR是TR的移动平均值。

qq_22808537的博客 1497

【LeetCode】第202题——快乐数(难度:简单)

【LeetCode】第202题——快乐数(难度:简单)题目描述解题思路代码详解注意点 题目描述 编写一个算法来判断一个数 n 是不是快乐数。 快乐数定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。 如果 n 是快乐数就返回 True ;不是,则返回 False 。 示例: 输入:19 输出:true 解释: 12 + 92 = 82 82 + 22 = 68 62 +

Se7en_Dayz的博客 484

第2章 数据库关系模型-单元测验-数据库原理及应用

第2章 数据库关系模型---数据库与机器学习 作业 常用的关系查询操作包括选择、投影、连接、并、交等。 v 实体完整性是指关系表的属性组成必须是完整的。 x 自然连接是一种等值连接。 v 在参照完整性中,可以定义级联操作。 v 用户自定义完整性可以实施数据的业务约束。 v 每个关系是一个二维表,但二维表不一定是关系。 v 关系中复合键至少包含两个属性。 v 代理键是为了唯一标识关系的不同元组,需要在表单或报表中显示出来。 x ...

aiqq136的博客 5723

刷刷刷Day6|第202题. 快乐数

第202题. 快乐数 LeetCode题目要求 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为1,那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。 示例: 输入:n =...

牧码人的专栏 101

RcisTarget实战:从差异基因到转录因子调控网络的完整分析流程(附代码)

本文详细介绍了RcisTarget工具在转录因子调控网络分析中的完整流程,从差异基因到motif富集分析,再到结果可视化与生物学解读。通过实战代码演示,帮助研究者掌握这一强大的R包应用,揭示基因表达背后的调控机制,特别适用于基因组学和生物信息学研究。

weixin_29214199的博客 228

metaRTC嵌入式webrtc编译指南

metaRTC编译支持qmake和cmake,qmake使用QT最为方便,新版本新增了cmake支持。 ...

metaRTC的博客 9518

LeetCode202.快乐数

本文为LeetCode202.快乐数解析,欢迎学习!

Toby的博客 284

【大语言模型 37】知识蒸馏深度实战:大模型向小模型迁移

本文深入探讨了知识蒸馏技术在大语言模型领域的应用,详细阐述了如何将庞大复杂的大模型知识有效迁移到轻量级小模型中。文章系统介绍了知识蒸馏的理论基础、多种蒸馏损失函数设计、特征匹配与注意力迁移技术、渐进式蒸馏策略以及全面的效果评估方法。通过实战案例和完整代码实现,读者将掌握从理论到实践的知识蒸馏全流程,了解如何在保持模型性能的同时显著降低计算资源需求,实现大语言模型的高效部署与应用。

熵数实验室 1508

LeetCode 202. 快乐数(快慢指针)

1. 题目 2. 解题 一个数经过若干次各位数平方和后,会等于它自己 使用类似环形链表的快慢指针法,最终快慢指针相遇,若不为1则是不快乐数 class Solution { public: int bitSquareSum(int n) { int sum = 0, bit; while(n > 0) { ...

Michael是个半路程序员 1183

JavaScript实现量化交易策略(附完整源码)

JavaScript实现量化交易策略(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 721

[Unity开发] [PICO]避坑指南:PICO商店上传APP时PXR Platform APPID设定详解

PICO开发者上传Unity应用时常见的"APPID不符"问题,主要源于混淆了开发者后台两个不同位置的APPID。

每日出拳老爷子的博客 555

LeetCode:快乐数(202)

编写一个算法来判断一个数 n 是不是快乐数。

Another_Shi的博客 678

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【简单】力扣算法题解析LeetCode202:快乐数

题目要求判断一个数是否为快乐数,即通过重复计算各位数字平方和最终得到1。解题采用快慢指针法检测循环:慢指针每次计算一次平方和,快指针计算两次。若快指针变为1,则是快乐数;若快慢指针相遇且不为1,说明进入循环。Java实现中,getNext函数计算平方和,主函数通过指针移动判断结果。该方法优化了空间(O(1))和时间(O(log n))复杂度。示例输入19返回true,2返回false。 关键词: 快乐数、快慢指针、平方和、循环检测、Java实现

ylumwd的博客 375

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【优选算法】——Leetcode——202—— 快乐数

1.定义快慢指针2.慢指针每次向后移动一步快指针每次向后移动两步3.判断相遇时候的值即可。

小李很执着的博客 1247

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

LeetCode 202快乐数

LeetCode 202快乐数 题目简述:编写一个算法来判断一个数 n 是不是快乐数。对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。 输入:19 输出:true 解释:12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 =

XBlog 197

day25【LeetCode力扣】202.快乐数

在 while 循环中,每次让快指针走两步,慢指针走一步,如果最终快指针和慢指针相遇,则说明。接着,在 while 循环中,判断快指针的平方和是否等于 1,如果是则返回。,每次循环,让快指针走两步,慢指针走一步。首先,该方法使用双指针法来判断快乐数。

canGfly的博客 662

【每日一题】LeetCode202 快乐数

方法优点缺点适用场景哈希集合法直观易懂,代码简单占用较多内存快速实现,数据量不大时快慢指针法零额外空间,内存效率最高需要理解双指针运动规律内存敏感场景,如嵌入式练习建议:可以用数字 19(快乐数)和 2(非快乐数)手动模拟两种方法的执行过程,加深理解。

2302_79600390的博客 1175

LeetCode第202题_快乐数

编写一个算法来判断一个数n是不是快乐数。

qq_40263592的博客 721

LeetCode 202. 快乐数

编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true ;不是,则返回 false

2301_80211119的博客 984

Leetcode202(力扣202):快乐数

方法一:使用set存放 用set存放不是快乐数的可能性,重点是找到循环节点(我们认为非快乐数都会进入一个循环) class Solution { public: int calculate(int n) { int now=0; while(n) { now+=(n%10)*(n%10); n=n/10; } return now; } bool isHappy(int n

weixin_44537258的博客 245

力扣(LeetCode)202. 快乐数

编写一个算法来判断一个数是不是“快乐数”。 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。 示例: 输入: 19 输出: true 解释: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1...

weixin_30306905的博客 171

力扣[LeetCode].202. 快乐数

class Solution { public: //先实现一下函数 int get(int x){ int res=0; while(x){ res +=(x%10)*(x%10); x/=10; } return res; } bool isHappy(int n) { int fast =get(n),slow=n; .

C/C++/Linux/MySQL 604

202. 快乐数(力扣LeetCode)

判断sum是否重复出现就可以使用unordered_set。编写一个算法来判断一个数 n 是不是快乐数。这道题目看上去貌似一道数学问题,其实并不是!

m0_73841621的博客 647

202. 快乐数【 力扣(LeetCode) 】

编写一个算法来判断一个数 n 是不是快乐数。如果 n 是 快乐数 就返回 true;不是,则返回 false。

yyh520025的博客 847
上一篇: 计算机图形学 | 投影变换
下一篇: Leetcode160. 相交链表
UestcXiye
博客等级 码龄8年 9028粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值