专题一 - 双指针 - leetcode 202. 快乐数 | 简单难度

news2025/1/10 21:29:19

leetcode 202. 快乐数

  • leetcode 202. 快乐数 | 简单难度
    • 1. 题目详情
      • 1. 原题链接
      • 2. 基础框架
    • 2. 解题思路
      • 1. 题目分析
      • 2. 算法原理
      • 3. 时间复杂度
    • 3. 代码实现
    • 4. 知识与收获

在这里插入图片描述

leetcode 202. 快乐数 | 简单难度

1. 题目详情

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

「快乐数」 定义为:

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

示例 1:
输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

示例 2:
输入:n = 2
输出:false

提示:
1 <= n <= 231 - 1

1. 原题链接

leetcode 202. 快乐数

2. 基础框架

● Cpp代码框架

class Solution {
public:
    bool isHappy(int n) {

    }
};

2. 解题思路

1. 题目分析

( 1 ) (1) (1) 判断一个整数n是否是快乐数:用该数的每个位置的平方和作为新值,一直进行下去,如果最终能得到1就返回false,反之无限循环就返回fasle。
( 2 ) (2) (2) 本题出现的无限循环指的是一个数变成一系列不同的数,直到又变成自身,然后循环往复,这个无限循环中的每个数是确定的。
( 3 ) (3) (3)

2. 算法原理

( 1 ) (1) (1) 首先想到的是一种解法:
模拟数n的变化过程,同时使用哈希表记录每次变化的新数new_n,判断每次变化的新数new_n是否是1
如果是1就是快乐数;
如果不是1就在哈希表中查找new_n自身是否已经出现过了:
————如果在哈希表中找到了自身就说明new_n出现过了,且new_n不是1,说明已经进入无限循环了,即数n一定不是快乐数;
继续变化得到下一个new_n,循环判断。
在这里插入图片描述

( 2 ) (2) (2) 第二种解法:快慢指针算法
你知道判断链表是否有环这道题是如何做的呢?
链表是否有环这道题使用了快慢双指针,慢slow每次走1步,快指针fast每次走两步,如果链表有环,最终slowfast会相遇即slow==fast

本题中n数n的变化也可以转换为与求链表是否有环中相类似的情况:
对于数n
情况1:不是快乐数,n经过一系列数的变化最终会变回已经出现的数,然后又从从已经出现得数开始再继续变化,形成无限循环,形象的说就是进入了环;

情况2:如是快乐数,n经过一系列数的变化最终会变到1,而1如果继续变化,那么会一直会回1本身,此时也可以说进入了无限循环,只不过这个无限循环中变化的数都是1本身;

上面两种情况就可以合并为一种情况:数n经过一系列变化,进入循环,快指针fast一次走2步(这里的走两步是形象的说法,实际上表示的是fast变化了两次),慢指针slow一次走1步,最终会进入环,在环中快慢指针最终一定会相遇:
判断两者的值是否相等,相等时说明相遇了,
————然后判断快慢指针的值是否是1
————————如果是1则是快乐数;反之不是快乐数。
在这里插入图片描述

3. 时间复杂度

为了使用n描述时间复杂度,下文描述数n时将会换成数num。

第一种解法 模拟: O ( n ) O(n) O(n),但借助了额外n的空间。

数num的变化长度是确定的,不管是变为1还是进入无限循环。
每次都会记录数num的变化,所以相当于遍历了一遍num的所有变化情况。

第二种解法 快慢指针: O ( n ) O(n) O(n)

3. 代码实现

解法一:模拟

class Solution {
public:
    int change(int val){
        int ret = 0;
        while(val){
            int mod = val % 10;
            ret += mod * mod;
            val /= 10;
        }
        return ret;
    }
    bool isHappy(int n) {
        unordered_set<int> us;// 哈希表存储每次出现的新数

        // 模拟n的变化
        while(n != 1){
            if(us.find(n) != us.end()) return false;
            us.insert(n);
            n = change(n);
        }
        return true;
    }
};

解法二:快慢双指针

class Solution {
public:
    int change(int val){
        int newval = 0;
        while(val){
            int mod = val % 10;
            val /= 10;
            newval += mod * mod; 
        }
        return newval;
    }
    bool isHappy(int n) {
        int slow = n, fast = n;
        do{
            slow = change(slow);
            fast = change(fast);
            fast = change(fast);
        } while(slow != fast);
        return slow == 1;
    }
};

4. 知识与收获

( 1 ) (1) (1) 快慢双指针的应用中,判断是否有环链表是一道经典的题目,本题虽然表面上与其无关,但是在分析之后发现有很大的相关性,也就可以使用快慢指针思路解决了。


T h e The The E n d End End

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1500440.html

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

相关文章

掼蛋的牌型与规律(上篇)

掼蛋是一项配合类的棋牌竞技游戏&#xff0c;掼蛋的最大魅力以及最集中的特点在于变化&#xff0c;在于组牌的变数。有的掼蛋新手往往先把牌配死&#xff0c;并且直接决定好出牌计划&#xff0c;然后守株待兔。掼蛋的取胜之道在于静态组合加上动态变化。本文主要介绍一下掼蛋的…

【广度优先搜索】【图论】【并集查找】2493. 将节点分成尽可能多的组

作者推荐 视频算法专题 本文涉及知识点 广度优先搜索 图论 并集查找 LeetCod2493. 将节点分成尽可能多的组 给你一个正整数 n &#xff0c;表示一个 无向 图中的节点数目&#xff0c;节点编号从 1 到 n 。 同时给你一个二维整数数组 edges &#xff0c;其中 edges[i] [ai…

神州大地人类来源猜想

在公元前2000年以前&#xff0c;伟大的中华民族还是石器时代&#xff0c;我们有很多美好的神话和传说&#xff0c;三皇五帝就是这个时代伟大部落或者部落首领的故事。 关于人类的历史&#xff0c;从基因学上最新的研究成果大概是这样的&#xff0c;虽然从300万年前就诞生了人类…

3D资产管理

3D 资产管理是指组织、跟踪、优化和分发 3D 模型和资产以用于游戏、电影、AR/VR 体验等各种应用的过程。 3D资产管理也称为3D内容管理。 随着游戏、电影、建筑、工程等行业中 3D 内容的增长&#xff0c;实施有效的资产管理工作流程对于提高生产力、减少错误、简化工作流程以及使…

Xinstall微信调起APP,提升用户体验与转化率

在移动互联网时代&#xff0c;APP已经成为人们日常生活中不可或缺的一部分。然而&#xff0c;随着市场竞争的加剧&#xff0c;如何让用户更便捷地使用APP&#xff0c;提高分享营销的下载转化率&#xff0c;成为了开发者们亟待解决的问题。今天&#xff0c;我们将向大家介绍一款…

C/C++的内存管理与初阶模板

引言 我们在学习C的时候&#xff0c;会经常在堆上申请空间&#xff0c;所以这个时候就体现了内存管理遍历。 图下是我们常见的计算机的内存划分&#xff1a; 我也在图下对部分变量存在的位置&#xff0c;及时标注。(如果有任何问题可以联系博主修改&#xff0c;感谢大家。) 那…

如何在Windows上使用Docker,搭建一款实用的个人IT工具箱It- Tools

文章目录 1. 使用Docker本地部署it-tools2. 本地访问it-tools3. 安装cpolar内网穿透4. 固定it-tools公网地址 本篇文章将介绍如何在Windows上使用Docker本地部署IT- Tools&#xff0c;并且同样可以结合cpolar实现公网访问。 在前一篇文章中我们讲解了如何在Linux中使用Docker搭…

Docker安装主从数据库

首先开启docker后直接执行命令 docker run -d \ -p 3307:3306 \ -v /xk857/mysql/master/conf:/etc/mysql/conf.d \ -v /xk857/mysql/master/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD123456 \ --name mysql-master \ mysql:8.0.29 默认情况下MySQL的binlog日志是自动开…

深入浅出Redis(八):Redis的集群模式

引言 Redis是一款优秀的键值对、内存非关系型数据库&#xff0c;单机节点下的Redis存在无法保证高可用、容量不足等问题 上篇文章介绍的哨兵主要能够保证主从架构下Redis的可用性&#xff0c;但是仍然存在容量不足、推举新的主节点时不能访问Redis的问题&#xff0c;集群可水…

#QT(串口助手-界面)

1.IDE&#xff1a;QTCreator 2.实验&#xff1a;编写串口助手 3.记录 接收框:Plain Text Edit 属性选择&#xff1a;Combo Box 发送框:Line Edit 广告&#xff1a;Group Box &#xff08;1&#xff09;仿照现有串口助手设计UI界面 &#xff08;2&#xff09;此时串口助手大…

ai脚本创作的软件有哪些?分享3款好用的工具!

随着人工智能技术的飞速发展&#xff0c;AI脚本创作软件已经成为内容创作者们的新宠。这些软件不仅能够帮助我们更高效地生成文章、视频脚本等&#xff0c;还能为我们提供独特的创意视角和无限的灵感。本文将带您深入了解几款备受瞩目的AI脚本创作软件&#xff0c;看看它们如何…

带胶囊按钮的标题是如何实现的

使用uni-app开发小程序经常会遇到胶囊按钮和标题之间融合的问题&#xff0c;因为这样可以大大提高页面的美观和整体性&#xff0c;那么接下来简单拆分步骤看下是如何实现的吧 &#x1f601; 可以看到我们设置的标题是在默认标题栏之下的&#xff08;这不是我们想要的效果 &…

许多人可能还不了解这个信息差:美赛的第一批 EI 已经录用,不用再犹豫啦

格局打开&#xff0c;美赛论文转学术论文发表 &#x1f680;&#x1f680; 各位同学&#xff0c;美赛已经结束了一段时间&#xff0c;你们是否还在焦急地等待最终成绩的公布&#xff1f;一些有远见的同学已经提前收到了一份喜讯&#xff1a;他们的美赛论文已被转化为学术论文并…

VMware虚拟机

1、虚拟机介绍 虚拟机&#xff08;Virtual Machine&#xff09;是一种软件&#xff0c;可以用来模拟具有完整硬件功能的完整的计算机系统的软件&#xff0c;并且可以和主机环境隔离开&#xff0c;互不影响。也就是&#xff0c;在实体计算机中能够完成的工作都可以通过虚拟机实…

【SQL】1068. 产品销售分析 I

题目描述 leetcode题目&#xff1a;1068. 产品销售分析 I 写法 select Product.product_name, Sales.year, Sales.price from Sales left join Product on Sales.product_id Product.product_id记录细节&#xff1a;加上表名检索效率更高。 -- ERROR: 时间超出限制 > 加…

UE4 Niagara 关卡4.1官方案例解析

we now directly supporting playing audio from arbitrary locations in particle systems.users have control over volume and pitch,and the system can directly play sound waves,or sound cues which have multiple waves in them.(我们现在直接支持在粒子系统中从任意…

一个用libcurl多线程下载断言错误问题的排查

某数据下载程序&#xff0c;相同版本的代码&#xff0c;在64位系统中运行正常&#xff0c;但在32位系统中概率性出现断言错误。一旦出现&#xff0c;程序无法正常继续&#xff0c;即使重启亦不行。从年前会上领导提出要追到根&#xff0c;跟到底&#xff0c;到年后的今天&#…

报考照片大小不能超过30k怎么设置?赶快学习起来

某些在线表格和申请表要求上传照片&#xff0c;但对文件大小有严格的限制&#xff0c;这种限制可能出现在学校申请、工作申请、签证申请、奖学金申请等各种在线表格中&#xff0c;比如有些平台要求上传报考照片大小不能超过30k&#xff0c;那么如何将图片压缩指定大小呢&#x…

长非编码RNA(lncRNA)LINC00339编码的肽段促进滋养层细胞与子宫内膜细胞粘附的研究 AbMole

胚胎植入是一个复杂的过程&#xff0c;受多种因素影响&#xff0c;尤其是子宫内膜&#xff08;endometrium&#xff09;与胚泡&#xff08;blastocyst&#xff09;之间的相互作用。子宫内膜接受性&#xff08;Endometrial Receptivity, ER&#xff09;是指子宫内膜在适当的功能…

第二门课:改善深层神经网络<超参数调试、正则化及优化>-深度学习的实用层面

文章目录 1 训练集、验证集以及测试集2 偏差与方差3 机器学习基础4 正则化5 为什么正则化可以减少过拟合&#xff1f;6 Dropout<随机失活>正则化7 理解Dropout8 其他正则化方法9 归一化输入10 梯度消失和梯度爆炸11 神经网络的权重初始化12 梯度的数值逼近13 梯度检验14 …