当前位置: 首页 > news >正文

Leetcode 每日一题 202.快乐数

目录

题意

算法思路

过题图片

算法实现

代码解析

复杂度分析

题目链接

结论


题意

判断正整数 n 是不是快乐数。

快乐数定义:

(1)每次将正整数替换为它每个位置上的数字的平方和。

(2)重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。

(3)如果可以变为 1,这个数就是快乐数。

示例
输入:19

输出:true

解释:

1² + 9² = 82

8² + 2² = 68

6² + 8² = 100

1² + 0² + 0² = 1

提示
1 <= n <= 2^31 -1

算法思路

这个问题的关键在于处理可能的无限循环。如果一个数最终会进入一个循环,那么它肯定不是快乐数。因此,我们可以使用哈希集合来记录在迭代过程中出现过的数。如果新生成的数已经在哈希集合中,那么我们可以确定这个数不是快乐数,因为它已经进入了循环。

过题图片

算法实现

以下是使用Java语言实现的算法:

import java.util.Set;
import java.util.HashSet;class Solution {private int getNextNumber(int n) {int res = 0;while (n > 0) {int temp = n % 10;res += temp * temp;n = n / 10;}return res;}public boolean isHappy(int n) {Set<Integer> record = new HashSet<>();while (n != 1 && !record.contains(n)) {record.add(n);n = getNextNumber(n);}return n == 1;}
}

代码解析

  1. getNextNumber 方法:这个方法用于计算给定数的下一个数,即每个位置上的数字的平方和。它通过不断取模和除法操作来实现。

  2. isHappy 方法:这是主要的算法实现。我们使用一个哈希集合 record 来记录出现过的数。在循环中,我们不断计算下一个数,并检查这个数是否已经在 record 中。如果已经在 record 中,说明进入了循环,返回 false。如果计算得到的数为1,说明找到了快乐数,返回 true

复杂度分析

  • 时间复杂度:最坏情况下,我们需要遍历所有可能的数直到找到1或者确定循环。在最坏情况下,这个算法的时间复杂度是 O(k),其中 k 是快乐数序列的长度。对于非快乐数,时间复杂度取决于循环的长度,但在实际应用中,这个循环通常不会太长。

  • 空间复杂度:我们使用了一个哈希集合来存储已经出现过的数,因此空间复杂度是 O(k),其中 k 是不同数的数量。

题目链接

202. 快乐数 - 力扣(LeetCode)

结论

通过使用哈希集合来记录已经出现过的数,我们可以有效地判断一个数是否为快乐数。这种方法简单而高效,能够处理可能的无限循环问题。

写在最后
如果你觉得有帮助到你,请给题解点个赞和收藏,让更多的人看到呀~

也欢迎你关注我,解锁更多图解 LeetCode,一起玩转数据结构与算法!

我是luckilyil,我们下次见!

http://www.lryc.cn/news/501468.html

相关文章:

  • SEC_ASA 第一天作业
  • Fluss:面向实时分析设计的下一代流存储
  • 【一本通】质因数分解
  • vue2+html2canvas+js PDF实现试卷导出和打印功能
  • 【Python网络爬虫 常见问题汇总】
  • Java SpringBoot 项目怎样在 IDEA 中运行、部署
  • GAMES101:现代计算机图形学-笔记-10
  • 【前端面试】Http篇
  • ZZCMS2023存在跨站脚本漏洞(CNVD-2024-44822、CVE-2024-44818)
  • Android 15 前台服务类型的变更
  • 微信小程序开发简易教程
  • 树莓派 发那科 Fanuc Linux跨平台CNC数控数据采集协议,TCP协议包
  • Ubuntu中安装配置交叉编译工具并进行测试
  • C++核心day3作业
  • socket UDP 环路回显的服务端
  • springboot/ssm车辆违章信息管理系统Java代码web项目汽车违章处罚源码
  • 5G模组AT命令脚本-关闭模组的IP过滤功能
  • STM32:实现ping命令(lwip)
  • nvm安装指定版本显示不存在及nvm ls-remote 列表只出现 iojs 而没有 node.js 解决办法
  • Spring Boot 中 WebClient 的实践详解
  • 在GITHUB上传本地文件指南(详细图文版)
  • 【大模型系列篇】LLaMA-Factory大模型微调实践 - 从零开始
  • 30天学会Go--第7天 GO语言 Redis 学习与实践
  • java 使用JSqlParser和CCJSqlParser 解析sql
  • 基于spring boot的高校专业实习管理系统的设计与实现
  • OpenCV相机标定与3D重建(11)机器人世界手眼标定函数calibrateRobotWorldHandEye()的使用
  • 计算机网络ENSP课设--三层架构企业网络
  • 【openwrt】openwrt-21.02 基于IP地址使用ipset实现策略路由操作说明
  • Git:常用命令
  • 【2025最新版】搭建个人博客教程