leetcode面试经典150题——50 快乐数

news2024/11/19 17:28:27

题目:快乐数

描述:
编写一个算法来判断一个数 n 是不是快乐数。
快乐数」 定义为:

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

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

方法一:哈希表
由题目可知我们判断一个数字是不是快乐数,通过不断循环模拟,最后判断该数字是不是等于1,我们发现如果这个数字是快乐数,那么只需要对其进行简单的模拟即可,但是如果不是快乐数的情况呢?
对于不是快乐数的数字,我们可以分两种情况:
1.一直循环,但是不等于1
2.不循环,并且越来越大
对于第一种情况,我们可以利用哈希表来进行判断循环的操作,如果数字出现了重复,那么就是发生了循环,返回false
而对于第二种情况,我们发现对于不同位数的数字,其各位平方相加之和的最大值如下图所示:
在这里插入图片描述
以此类推,我们发现从三位数开始往后,其各位平方相加之和不可能大于这个数,所以我们对于任意一个数字,最后都不会变得无穷大,因此不存在出现第二种情况,所以对于一个不是快乐数的数字,一定会出现循环。而我们 跳出循环的方法可以利用哈希表来进行操作。
时间复杂度:o(logn) 一个值为n的数的位数为logn,因此我们查找下一个给数的时间为o(logn)
空间复杂度:o(1)

bool isHappy(int n) {
    unordered_set<int> set;
    while(n!=1&&!set.count(n)){//当n不等于1并且没有陷入循环的时候继续while循环
        set.insert(n);
        int sum = 0;
        while(n>0){
            int digit = n%10;
            sum+=digit*digit;
            n/=10;
        }
        n = sum;//更新n
    }
    return n==1;
}

方法二:快慢指针
同样的,我们出来可以利用哈希表来判断循环,还可以用快慢指针来判断循环,因为在一个循环中,快指针一定会追上慢指针,所以当我们快指针追上了慢指针时,就证明出现了循环,返回false,当没有循环的时候,快指针会比慢指针更加快的达到1,因此我们while循环的结束条件为快指针追上了慢指针或者快指针达到了1.
时间复杂度:o(logn) 同样的查找下一个数的时间为logn
空间复杂度:o(1)

bool isHappy(int n) {
    int slow = n,fast = n;
    do{
        fast = getNext(getNext(fast));//快指针一次前进2格
        slow = getNext(slow);//慢指针一次前进1格
    }while(fast!=slow&&fast!=1);
    return fast==1;
}
//求数字n的下一个数字
int getNext(int n){
    int sum = 0;
    while(n>0){
        int digit = n%10;
        sum+=digit*digit;
        n/=10;
    }
    return sum;
}

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

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

相关文章

CSS 雷达监测效果

<template><view class="center"><view class="loader"><view></view></view></view></template><script></script><style>/* 设置整个页面的背景颜色为深灰色 */body {background-col…

【数据结构 | 希尔排序法】

希尔排序法 思路ShellSort 思路 希尔排序法又称缩小增量法。希尔排序法的基本思想是&#xff1a;先选定一个整数&#xff0c;把待排序文件中所有记录分成个组&#xff0c;所有距离为的记录分在同一组内&#xff0c;并对每一组内的记录进行排序。然后&#xff0c;取&#xff0c…

10分钟快速上手LLM大模型Python前端开发(一)

10分钟快速上手LLM大模型Python前端开发&#xff08;一&#xff09; 安装小试牛刀测试demo更改服务端口 github&#xff1a;https://github.com/riverind CSDN&#xff1a;https://blog.csdn.net/woai8339/article/details/131442801 微信公众号&#xff1a;leetcode_algos_lif…

C++PythonC# 三语言OpenCV从零开发(1):环境配置

文章目录 前言课程选择环境配置PythonC#COpenCV官网下载新建C项目测试运行Csharp版Python版 gitee仓库总结 前言 由于老王我想转机器视觉方向的上位机行业&#xff0c;我就打算开始从零学OpenCV。但是目前OpenCV有两个官方语言&#xff0c;C和Pyhont。C# 有大佬做了对应的Open…

AD20 解决PCB铺铜与锡盘之间锯齿状连接问题的设置方法

上一篇文章&#xff1a;PCB简单绘制一般步骤 对上一篇文章中&#xff0c;关于铺铜设置的补充&#xff0c;解决铺铜与锡盘之间的锯齿状连接情况。 1、新建Demo&#xff0c;创建PCB板子&#xff0c;布置锡盘和铺铜&#xff0c;如图&#xff1a; 2、设置规则&#xff0c;参考上一…

八. 实战:CUDA-BEVFusion部署分析-导出带有spconv的SCN网络的onnx

目录 前言0. 简述1. 使用spconv进行SCN的推理测试2. 导出onnx3. 补充-装饰器钩子函数总结下载链接参考 前言 自动驾驶之心推出的 《CUDA与TensorRT部署实战课程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第八章——实战&#x…

基于传统机器学习模型算法的项目开发详细过程

1 场景分析 1.1 项目背景 描述开发项目模型的一系列情境和因素&#xff0c;包括问题、需求、机会、市场环境、竞争情况等 1.2. 解决问题 传统机器学习在解决实际问题中主要分为两类&#xff1a; 有监督学习&#xff1a;已知输入、输出之间的关系而进行的学习&#xff0c;从而…

技术阅读周刊第十四期:Golang 作者 Rob Pike 在 GopherConAU 上的分享

技术阅读周刊&#xff0c;每周更新。 历史更新 20231215&#xff1a;第十期20231122&#xff1a;第十一期20231129&#xff1a;第十二期20240105&#xff1a;第十三期&#xff1a;一些提高生产力的终端命令 What We Got Right, What We Got Wrong URL: https://commandcenter.b…

玩转 openEuler (一)-- 系统安装

简介 openEuler 是一款开源操作系统。当前 openEuler 内核源于Linux&#xff0c;支持鲲鹏及其它多种处理器&#xff0c;能够充分释放计算芯片的潜能&#xff0c;是由全球开源贡献者构建的高效、稳定、安全的开源操作系统&#xff0c;适用于数据库、大数据、云计算、人工智能等…

羊驼2:开放的基础和微调聊天模型--Llama 2论文阅读

论文地址&#xff1a;https://arxiv.org/pdf/2307.09288.pdfd 代码地址&#xff1a;GitHub - facebookresearch/llama-recipes: Examples and recipes for Llama 2 model 问答 用了多少个gpu&#xff1f; 这篇文档中使用了3.3M GPU小时的计算&#xff0c;使用的硬件类型是A…

3万字数据结构与算法学习笔记+知识点总结

文章目录 数据结构与算法排序排序算法常见排序算法复杂度冒泡排序&#xff08;Bubble Sort&#xff09;选择排序&#xff08;Selection Sort&#xff09;插入排序&#xff08;Insertion Sort&#xff09;希尔排序&#xff08;Shell Sort&#xff09;堆排序&#xff08;Heap Sor…

Microsoft Edge如何安装插件去广告

打开enge浏览器&#xff0c;点击这里 选择扩展 点击打开Microsoft Edge网站 点击搜索栏&#xff0c;输入广告拦截&#xff0c;之后点击键盘的Enter键 点击获取就可以了。如果你喜欢其他的插件&#xff0c;也可以在里面搜索并且下载

文献阅读:Large Language Models as Optimizers

文献阅读&#xff1a;Large Language Models as Optimizers 1. 文章简介2. 方法介绍 1. OPRO框架说明2. Demo验证 1. 线性回归问题2. 旅行推销员问题&#xff08;TSP问题&#xff09; 3. Prompt Optimizer 3. 实验考察 & 结论 1. 实验设置2. 基础实验结果 1. GSM8K2. BBH3.…

MyBatis的配置及简单使用

1.配置myBatis 1.myBatis的作用 MyBatis 是一个开源的持久层框架&#xff0c;它的主要作用是简化数据库操作&#xff0c;使得开发者能够更方便地与数据库进行交互。 MyBatis 允许开发者使用简单的 XML 或注解配置 SQL 映射&#xff0c;从而实现数据库操作&#xff0c;而不需要…

解决“win11无法识别U盘“问题

在15.6寸笔记本上插上U盘&#xff0c;有时候出现U盘无法识别的现象&#xff0c;出现这种问题的原因有许多&#xff0c;比如U盘的格式不被当前电脑支持、电脑的USB接口电压过低、没有安装U盘驱动等等。     若是U盘格式不支持&#xff0c;则把U盘改成电脑能够识别的格式&#…

C++I/O流——(4)文件输入/输出(第一节)

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 含泪播种的人一定能含笑收获&#xff…

Fiddler工具 — 13.AutoResponder应用场景

简单介绍几个应用场景&#xff1a; 场景一&#xff1a;生产环境的请求重定向到本地文件&#xff0c;验证结果。 例如&#xff1a;某网站或者系统修改了问题&#xff0c;但尚未更新到生产环境&#xff0c;可重定向到本地修改后的文件进行验证&#xff0c;这样能够避免更新到生产…

maven管理使用

maven基本使用 一、简介二、配置文件三、项目结构maven基本标签实践(例子) 四、pom插件配置五、热部署六、maven 外部手动加载jar打包方式Maven上传私服或者本地 一、简介 基于Ant 的构建工具,Ant 有的功能Maven 都有,额外添加了其他功能.本地仓库:计算机中一个文件夹,自己定义…

鸿蒙Harmony-层叠布局(Stack)详解

我们总是为了太多遥不可及的东西去拼命&#xff0c;却忘了人生真正的幸福不过是灯火阑珊处的温暖&#xff0c;柴米油盐的充实&#xff0c;人生无论你赚的钱&#xff0c;是多还是少&#xff0c;经历的事情是好还是坏&#xff0c;都不如过好当下的每一天&#xff01; 目录 一&am…

5.2 Android BCC环境搭建(adeb版,下)

五,运行adeb shell adeb shell 其实这个配置比较简单,也就是5.1中的第三节“adeb prepare --full“和该节的”adeb shell",就可以连接我们的android设备,在android设备中或执行bcc工具,来对我们的android环境进行hook了。 六,其他指令 6.1 从开发机移除adeb adeb…