美文网首页算法
LeetCode题解:快乐数

LeetCode题解:快乐数

作者: 搬码人 | 来源:发表于2022-03-30 20:40 被阅读0次

题目描述

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

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

如果n是快乐数就返回true,否则就返回false。

示例

  • 示例1
    输入:n = 19
    输出:true
    解释:
    1^2 + 9^2 = 82
    8^2 + 2^2 = 68
    6^2 + 8^2 = 100
    1^2 + 0^2 + 0^2 = 1
  • 示例2
    输入:n = 2
    输出:false

思路方法

只需要抓住一点:按快乐数的运算方式,最后得到的数要么是1,要么就在一定范围内无限循环(得不到1)。

哈希法

class Solution {
    public int getNext(int n){
        int totalNum = 0;
        while(n!=0){
            int temp=n%10;
            n/=10;
            totalNum+= temp*temp;
        }
        return totalNum;
    }
    public boolean isHappy(int n) {
        Set<Integer> hash = new HashSet<Integer>();
        while(n>1&&!hash.contains(n)){
            hash.add(n);
            n = getNext(n);
        }
        return n==1;
    }
}

复杂度分析

  • 时间复杂度:O(logn)
  • 空间复杂度:O(logn)

双指针法

class Solution {
    public int getNext(int n){
        int totalNum = 0;
        while(n!=0){
            int temp=n%10;
            n/=10;
            totalNum+= temp*temp;
        }
        return totalNum;
    }
    public boolean isHappy(int n) {
        int slow = n;
        int fast = getNext(n);
        while(fast!=1&&fast!=slow){
            slow = getNext(slow);
            fast = getNext(getNext(fast));
        }
        return fast==1;
    }
}

复杂度分析

  • 时间复杂度:O(logn)
  • 空间复杂度:O(1)

相关文章

  • LeetCode题解:快乐数

    题目描述 编写一个算法来判断一个数n是不是快乐数。“快乐数”定义为: 对于一个正整数,每次将该数替换为它每个位置上...

  • LeetCode题解:完美数

    题目描述 给定一个正整数,如果它和除了它自身以外的左右正因子之和相等,我们称之为完美数。给定一个正整数n,如果是完...

  • LeetCode题解:回文数

    题目描述 给你一个整数x,如果x是一个回文整数,返回true;否则返回false。回文数是指正序度和倒叙读都是一样...

  • LeetCode题解

    LeetCode题解

  • 精选TOP面试题

    序号编号题目题解通过率难度出现频率11两数之和[https://leetcode-cn.com/problems/...

  • 【leetcode】快乐数

    【leetcode】快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」定义为:对于一个正整数,每一次...

  • LeetCode题解:两数之和

    题目描述 给定一个数组nums和一个整数target,请你在该数组中找出和为目标值target的那两个整数,并返回...

  • LeetCode题解:两数相加

    题目描述 给你两个非空的链表,表示两个非负的整数。它们每位数字都是按照逆序的方式存储的,并且每个结点只能存储一位数...

  • LeetCode题解:三数之和

    题目描述 给你一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得a+b+c=0?请你找...

  • 干货!LeetCode 题解汇总

    LeetCode 传送门 https://leetcode.com/ LeetCode 题解 Github:htt...

网友评论

    本文标题:LeetCode题解:快乐数

    本文链接:https://www.haomeiwen.com/subject/ixmwjrtx.html