LeetCode---快乐数的多种解法(Java)

本文介绍了快乐数的概念,并提供了四个使用Java实现快乐数判断的算法,包括直接计算平方和、查找不快乐数的循环模式、使用HashSet和ArrayList避免重复。通过这些解法,可以判断一个数是否为快乐数,即数位平方和最终是否达到1。
摘要由CSDN通过智能技术生成

今天你快乐了吗?

谨以此篇文章记录快乐数的解法

题目:

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

一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。

 示例:

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

我们以上面的示例来思考一下

19是快乐数,返回true

判断19为快乐数的依据是将19拆分开,计算每位数字的平方和,然后重复此运算。直到平方和恒为1,则确认为快乐数;否则,就不是快乐数。

那我们就可以根据以上思路设计解题算法(以下解法都是Java语言)

解法一

此解法思路是使循环计算“n"的平方和,直至平方和恒等于一个值。然后判断这个值是否为1。

时间复杂度为O(n)

class Solution {
    public boolean isHappy(int n) { 
        int slow=sum_happy(n),fast=sum_happy(sum_happy(n));   //slow为n的每个数字的平方和,fast为slow的每个数字的平方和
        wh
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值