Leetcode算法解析——快乐数

news2024/11/22 21:18:42

1.题目链接:快乐数

2.题目描述:

编写一个算法来判断一个数 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

3.题目分析:

为了⽅便叙述,将「对于⼀个正整数,每⼀次将该数替换为它每个位置上的数字的平⽅和」这⼀个
操作记为x操作;
题⽬告诉我们,当我们不断重复x操作的时候,计算⼀定会「死循环」,死的⽅式有两种:
情况⼀:⼀直在1中死循环,即1 -> 1 -> 1 -> 1…
情况⼆:在历史的数据中死循环,但始终变不到1
由于上述两种情况只会出现⼀种,因此,只要我们能确定循环是在「情况⼀」中进⾏,还是在「情
况⼆」中进⾏,就能得到结果。

4.算法思路:

但重复执行x的时候,数据会陷入到一个死循环中,利用快慢指针的特性,快指针和慢指针早晚会相遇。如果相遇位置是1,那么这个数一定是快乐数;如果相遇位置不是1,那么就不是快乐数

5.算法流程图:

5.1快乐数流程图:

请添加图片描述

5.2非快乐数流程图:

请添加图片描述

6.C++算法代码:

class Solution {
public:
    //返回n这个数每一位上的平方和
    int Sum(int n)
    {
        //求和
        int sum=0;
        while(n)
        {
             //提取个位
            int t=n%10;
            //计算平方和
            sum+=t*t;
            //干掉个位
            n=n/10;
        }
        return sum;
    }
    bool isHappy(int n) {
        //slow指向n的平方,fast指向n的平方的平方
        int slow=Sum(n),fast=Sum(Sum(n));
        while(slow!=fast)
        {
            slow=Sum(slow);
            fast=Sum(Sum(fast));
        }
        return slow==1;
    }
    
};

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

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

相关文章

死锁原因及死锁检测组件的实现

1 死锁形成的条件 死锁&#xff0c;是指多个线程或者进程在运行过程中因争夺有限的系统资源而造成的一种僵局&#xff0c;当进程或者线程处于这种僵持状态&#xff0c;若无外力作用&#xff0c;它们将无法再向前推进。如下图所示&#xff0c;线程 A 想获取线 程 B 的锁&#x…

当你在 Tubi 是一位 Tech Lead

在过去&#xff0c;我们邀请了 Tubi 技术团队的许多资深工程师&#xff0c;听他们分享了作为资深工程师的一些故事。今天&#xff0c;我们将镜头转向那些在 Tubi 担任 Tech Lead 的工程师&#xff0c;他们选择了在独立开发之外&#xff0c;承担一定的技术管理工作&#xff1a; …

计算机网络——计算机网络体系结构(1/4)-常见的计算机网络体系结构(OSI体系、TCP/IP体系、原理体系五层协议)

目录 OSI体系结构 OSI体系介绍 OSI失败的原因 TCP/IP体系结构 TCP/IP概述 网络接口层 网际层 运输层 应用层 TCP/IP命名的由来 原理体系结构&#xff08;五层协议&#xff09; OSI体系结构 OSI体系介绍 著名的“开放系统互连参考模型”&#xff0c;简称为OSI。该模…

Windows下Qt读取系统的内存、CPU、GPU等使用信息

一、前言 在当今计算机应用广泛的领域中&#xff0c;了解系统的内存、CPU和GPU使用情况是非常重要的。对于开发人员和系统管理员来说&#xff0c;准确获取这些信息可以帮助他们优化软件性能、诊断问题并做出相应的调整。在Windows平台上实现这一目标会涉及到调用Windows系统AP…

Apifox 学习笔记 - 前置操作之:动态更新请求体中的时间戳

Apifox 学习笔记 - 前置操作之&#xff1a;动态更新请求体中的时间戳 1. 在前置操作中添加一个&#xff1a;自定义脚本或公共脚本2. 定义我们所需的环境变量。3. 在请求参数中使用【时间戳】4. 检验参考资料 1. 在前置操作中添加一个&#xff1a;自定义脚本或公共脚本 2. 定义我…

WPF DataGrid详细列表手动显示与隐藏

设置显示序号与折叠显示样式 <DataTemplate x:Key"dtNum"><Button BorderBrush"Transparent" Style"{x:Null}" Click"BtnRowDetail_ShowHideClick" FontSize"16" Background"Transparent"><Stack…

Dubbo从0到1——万字完整学习笔记

目录 RPC理论概述 RPC的基本思想 RPC的实现组成部分 RPC的实现流程 RPC的核心思想 RPC调用分类 初识Dubbo Dubbo特性 Dubbo设计架构 zookeeper环境搭建 搭建注册中心环境 搭建监控中心环境 Dubbo入门案例(Dubbo Spring) 实现步骤 搭建中介者组件共享资源 打包为jar&#xf…

京东数据接口:京东数据分析怎么做?

电商运营中数据分析的重要性不言而喻&#xff0c;而想要做数据分析&#xff0c;就要先找到数据&#xff0c;利用数据接口我们能够更轻松的获得比较全面的数据。因此&#xff0c;目前不少品牌商家都选择使用一些数据接口来获取相关电商数据、以更好地做好数据分析。 鲸参谋电商…

[0xGameCTF 2023] web题解

文章目录 [Week 1]signinbaby_phphello_httprepo_leakping [Week 2]ez_upload [Week 1] signin 打开题目&#xff0c;查看下js代码 在main.js里找到flag baby_php <?php // flag in flag.php highlight_file(__FILE__);if (isset($_GET[a]) && isset($_GET[b])…

2023年中国家纺行业研究报告

第一章 行业概况 1.1 定义 家纺行业&#xff0c;即家用纺织品行业&#xff0c;是纺织业中的一个重要分支&#xff0c;它与服装用纺织品和产业用纺织品共同构成了纺织业的三大支柱。家纺不仅仅是家庭生活中的必需品&#xff0c;更是居室装饰中不可或缺的元素&#xff0c;被誉为…

Java多线程篇(11)——BlockingQueue(优先级阻塞,延迟队列)

文章目录 1、PriorityBlockingQueue2、DelayQueue 1、PriorityBlockingQueue 优先级阻塞队列就是在优先级队列的基础上增加队列排序的功能&#xff0c;将高优先级排在前面&#xff0c;所以优先级队列的元素需要实现Comparator接口。 如果数据结构用数组去维护队列的话&#xf…

uniapp系列-图文并茂教你配置uniapp开发环境

环境安装 1. 安装 node.js (版本 18/16) 在搭建 Vue 开发环境之前&#xff0c;请先下载 node.js。 Node 可从官方网站下载&#xff0c;也可从中文网站下载。根据你的电脑选择 32 位 或 64 位。网站&#xff1a; Node 或者访问 历史版本 查看 node 版本 C:\Users> node -…

超级干货 | 数据平滑9大妙招(python版)

大家好&#xff0c;对数据进行平滑处理的方法有很多种&#xff0c;具体的选择取决于数据的性质和处理的目的。今天给大家分享9大常见数据平滑方法&#xff1a; 移动平均Moving Average 指数平滑Exponential Smoothing 低通滤波器 多项式拟合 贝塞尔曲线拟合 局部加权散点平…

【python海洋专题二十一】subplots共用一个colorbar

上期读取subplot&#xff0c;并出图 但是存在一些不完美&#xff0c;本期修饰 本期内容 共用colorbar 1&#xff1a;未共用colorbar 共用colorbar 1&#xff1a;横 2&#xff1a;纵 关键语句 图片 cb_ax fig.add_axes([0.15, 0.02, 0.6, 0.03]) #设置colarbar位置 cbar …

切换npm的版本

1、在配置环境变量的地址中&#xff0c;多准备几个已解压版本的node 2、要想升降版本直接更改该文件中的文件夹名称就行 环境变量中的path的值是不用变的C:\Program Files\nodejs

Leetcode 剑指 Offer II 048. 二叉树的序列化与反序列化

题目难度: 困难 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 序列化是将一个数据结构或者对象转换为连续的比特位的操作&#…

商品分类代码

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>商品分类代码</title> <script type"text/javascript"> function MM_preloadImages() { //v3.0var ddocument; if(d.images){ if(!d.MM_p) d.MM_p…

5+甲基化+预后模型搭配实验

今天给同学们分享一篇甲基化预后模型实验的生信文章“Six immune-related promising biomarkers may promote hepatocellular carcinoma prognosis: a bioinformatics analysis and experimental validation”&#xff0c;这篇文章于2023年3月23日发表在Cancer Cell Int期刊上&…

三极管和MOS如何导通

三极管类型 原理图分析三极管&#xff0c;先看看它是什么类型&#xff0c;是PNP还是NPN。 一般通过看E极&#xff08;发射极&#xff09;流向&#xff0c;从B&#xff08;基极&#xff09;到E&#xff08;发射极&#xff09;为NPN。从E&#xff08;发射极&#xff09;到B&…

新的U-Net 网络结构

最近看到一篇很有趣的文章&#xff0c;Rethinking the unpretentious U-net for medical ultrasound image segmentation 这个文章提出了一种新的U-Net 网络结构。以前大家使用U-Net 喜欢加入新的模块或者使用多个U-Net 并联的方法进行语义分割。这篇文章提出了一种的新U-Net 结…