力扣: 快乐数

news2024/11/13 3:29:43

文章目录

  • 需求
  • 分析
  • 代码
  • 结尾

在这里插入图片描述


需求

编写一个算法来判断一个数 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,则该数字是快乐数字;如果出现了循环(即进入了一个已经出现过的数字),则该数字不是快乐数字。


代码

public boolean isHappy(int n) {
    Set<Integer> set = new HashSet();
    while( true ){
        n = getSum(n);
        if( n == 1 ){
            return true;
        }
        if( !set.add(n) ){
            return false;
        }
    }
}

private int getSum(int n){
    int sum = 0;
    while( n > 0 ){
        int temp = n % 10;
        sum += temp * temp;
        n = n / 10;
    }
    return sum;
}

代码解释:

这是主方法,接收一个整数 n,判断它是否为快乐数字。
Set<Integer> set = new HashSet();

创建一个 HashSet 用于存储已经出现过的数字。这个集合帮助我们检测是否进入了循环。

无限循环,直到找到结果(是快乐数字还是进入循环)。
n = getSum(n);

调用 getSum 方法计算 n 的每一位的平方和,并将结果赋值给 n。
if (n == 1) { return true; }

如果计算结果为1,则返回 true,说明 n 是一个快乐数字。
if (!set.add(n)) { return false; }

尝试将 n 添加到 set 中。如果添加失败(即 set 中已经存在这个数字),说明 n 进入了循环,返回 false,说明 n 不是快乐数字。

结束 while 循环。

辅助方法getSum:

这是一个私有方法,用于计算数字 n 各位数字的平方和。
int sum = 0;

初始化 sum 为0,用于累加每一位数字的平方和。
while (n > 0) {

只要 n 大于0,就继续计算。
int temp = n % 10;

取 n 的最后一位数字。
sum += temp * temp;

将该位数字的平方累加到 sum 中。
n = n / 10;

去掉 n 的最后一位数字。

结束 while 循环。
return sum;

返回计算得到的平方和。


运行结果:

在这里插入图片描述

结尾

以上 是我对这道算法的一些遐想和延伸, 可能不是最优解, 但是算法的优化嘛 本身就是一个思索的过程, 能在这个思索和迭代的过程中有所收获和乐趣就是在成长了, 欢迎大家一起来交流更多的解答…





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

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

相关文章

社群空间站9.9付费入群系统二开源码 易支付版全套搭建教程

1.创建站点 2.搭建环境 php7.2 3.上传源码包 数据库批量修改sq9.dongge1.icu s10.dongge1.icu 改为你的域名 4.上传数据库 修改数据库文件/data/config/ 5.访问域名 6.账户密码 admin 123456 7.易支付修改地址是在/data/tpl/app/default/yy_shequn2/lib/epay.config.php…

【动捕_VRPN_ROS2】安装vrpn_client_ros2库将动捕数据转换ROS2话题

安装vrpn_client_ros2库将动捕数据转换ROS2话题 环境&#xff1a; Ubuntu &#xff1a;20.04 LTS ROS &#xff1a;ROS2 Foxy 安装VRPN库 执行以下命令安装VRPN库。 git clone https://github.com/vrpn/vrpn.git mkdir -p vrpn/build cd vrpn/build cmake .. make sudo …

【技术】叉车防撞报警系统的原理及应用场景

叉车作为一种大型货物的运输机械&#xff0c;自出现之后大大提高了人们在日常工作的运输效率&#xff0c;但是同样存在着一部分弊端&#xff0c;例如存在着较多的视觉盲区&#xff0c;随着人们对于叉车的日常使用&#xff0c;叉车的安全事故愈发严重&#xff0c;很容易发生碰撞…

C#高级:递归2-根据ID反向递归求其所有的祖先节点信息

目录 一、实现demo 二、封装方法 【ID>祖先ID】 【ID>祖先实体】 三、递归讲解 一、实现demo class MainClass {static List<Person> PersonList new List<Person>(){new Person(){ Id1,ParentIDnull,Name"小明曾祖父",},new Person(){ Id2…

《论面向方面的编程技术及其应用》写作框架,软考高级系统架构设计师

论文真题 随着社会信息化进程的加快&#xff0c;计算机及网络已经被各行各业广泛应用&#xff0c;信息安全问题也变得愈来愈重要。它具有机密性、完整性、可用性、可控性和不可抵赖性等特征。信息系统的安全保障是以风险和策略为基础&#xff0c;在信息系统的整个生命周期中提…

基于Java+SpringBoot+Vue+MySQL的西安旅游管理系统网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的西安旅游管理系统网站【附源码文档】、…

美团OC感想

OC感想 晚上十点拿到美团意向了 到家事业部。&#xff0c;日常实习没过&#xff0c;暑期实习没过&#xff0c;秋招终于意向了&#xff0c;晚上十点发的&#xff0c;整整激动到一点才睡着&#xff0c;不仅因为这是秋招的第一个意向&#xff0c;更因为这是我一直心心念念想去的地…

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中&#xff0c;管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等&#xff0c;都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools&#xff1f; pip-tools 是一组命令行工具&…

2024-09-08 小红书机试 解题报告 | 珂学家

前言 题解 这是2024年9月8号的小红书机试题。 看到群里有人在讨论&#xff0c;小红书的机试题&#xff0c;顺手做了下&#xff0c;感觉挺有意思的。 现在的机试题&#xff0c;是真的难&#xff0c;好卷。 A. 机器人 题目描述: m * n的格子&#xff0c;都有一个方向指令LRUD…

挑战当前最难、规模最大多模态评测基准MME-RealWorld,QwenVL-2位列第一但并未及格

32 个标注者&#xff0c;29,429 条标注数据&#xff0c;图像平均分辨率 20001500&#xff0c;当前最难最大的纯手工标注图像感知 benchmark 来了&#xff01;现有模型没有一个在总分上取得 60% 以上的准确率。 论文链接&#xff1a; https://arxiv.org/abs/2408.13257 项目主…

MLLM(三)| BigModel平台正式上线Plus系列全家桶

2024年8月28日&#xff0c;在ACM SIGKDD&#xff08;国际数据挖掘与知识发现大会&#xff0c;KDD&#xff09;会议现场&#xff0c;智谱AI重磅推出新一代全自研基座大模型GLM-4-Plus、图像/视频理解模型GLM-4V-Plus和文生图模型CogView-3-Plus。 1、模型介绍页&#xff1a;htt…

Maven项目父模块POM中是否应该包含SpringBoot打包插件(spring-boot-maven-plugin)

父模块POM是否包含SpringBoot打包插件 一、场景 一个基于SpringBoot的Maven父子模块的项目&#xff08;一个父项目中包含多个子项目&#xff09;&#xff0c;父模块 POM文件中&#xff0c;是否应该包含打包需要的插件&#xff08;spring-boot-maven-plugin&#xff09;&#…

strcat函数的使用和模拟实现

目录 1.头文件 2.函数功能​编辑 3.注意事项&#xff1a; 4.strcat函数模拟实现&#xff1a; 方源一把抓住VS2022&#xff0c;催动春秋产的气息&#xff0c;顷刻炼化&#xff01; 1.头文件 strcat函数的使用&#xff0c;需要头文件 #include<string.h>2.函数功能 s…

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

Course1-Week1: https://github.com/kaieye/2022-Machine-Learning-Specialization/tree/main/Supervised%20Machine%20Learning%20Regression%20and%20Classification/week11️⃣线性回归&#xff08;linear regression&#xff09; f w , b ( x ) w x b f_{w,b}(x) wx b …

【深度学习讲解笔记】前言

小编为AI专业的本科学生&#xff0c;最近入手了一本《深度学习讲解》的书&#xff0c;由于封面画了苹果&#x1f34e;&#xff0c;所以也叫苹果书&#xff0c;这本书目前在全网的热度很高。 本书是根据李宏毅老师讲授的《机器学习》课程编写的&#xff0c;作者是来自DataWhale…

SCI顶刊中“introduction”经典模板,建议收藏!

Introduction Introduction 的行文框架是一个从较宽泛的学术领域逐渐缩小到你的研究目标的过程。 1.研究背景和重要性 (Background AndImportance) • Mention of previous work on the subject • A statement of the importance of the subject 引言部分的第一段需要给出…

(Charles)如何抓取手机http的报文

抓包的目的&#xff1a; 发现bug需要定位要抓包 检查数据传输的安全性 接口测试遇到需求文档不全要抓包 抓包主要抓取的是http协议&#xff08;https协议&#xff09;的报文 http协议规范客户端和服务端的数据传输格式&#xff0c;是一个标准和规范 每个http连接包括请求消息和…

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya&#xff08;不是本人&#xff0c;claude AI&#xff09;在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容&#xff1a; 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用&…

CSP-J基础之数学基础 杨辉三角 一篇搞懂

文章目录 前言杨辉三角介绍杨辉三角的结构数学中的形式杨辉三角的性质 杨辉三角进行左对齐杨辉三角的递推公式编程实现杨辉三角总结 前言 杨辉三角是数学中一个非常有趣且重要的概念。它不仅在组合数学中扮演着重要角色&#xff0c;还在许多数学问题的解决中提供了有力的工具。…

【重学 MySQL】二十、运算符的优先级

【重学 MySQL】二十、运算符的优先级 MySQL 运算符的优先级&#xff08;由高到低&#xff09;注意事项示例 在 MySQL 中&#xff0c;运算符的优先级决定了在表达式中各个运算符被计算的先后顺序。了解运算符的优先级对于编写正确且高效的 SQL 语句至关重要。以下是根据高权威性…