美文网首页
46快乐数

46快乐数

作者: Jachin111 | 来源:发表于2020-08-26 13:08 被阅读0次

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

如果 n 是快乐数就返回 True ;不是,则返回 False 。
示例:
输入:19
输出:true
解释:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1

递归解法
不是快乐数的数称为不快乐数(unhappy number),所有不快乐数的数位平方和计算,最后都会进入 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 的循环中
已知规律: [1 ~ 4] 中只有 1 是快乐数,[5 ~ ∞] 的数字要么回归到 1 要么回归到 4 或 3
因此仅需在 n > 4 时调用递归

class Solution:
    def isHappy(self, n: int) -> bool:
        return self.isHappy(sum(int(i) ** 2 for i in str(n))) if n > 4 else n == 1

集合解法

class Solution:
    def isHappy(self, n: int) -> bool:
        seen = {1}
        while n not in seen:
            seen.add(n)
            n = sum(int(i) ** 2 for i in str(n))
        return n == 1

哈希迭代

class Solution:
    def isHappy(self, n: int) -> bool:
        n = str(n)
        visited = set()
        while 1:
            n = str(sum(int(i) ** 2 for i in n))
            if n == "1":
                return True
            if n in visited:
                return False
            visited.add(n)

快慢跑

class Solution:
    def isHappy(self, n: int) -> bool:
        n = str(n)
        slow = n
        fast = str(sum(int(i) ** 2 for i in n))
        while slow != fast:
            slow = str(sum(int(i) ** 2 for i in slow))
            fast = str(sum(int(i) ** 2 for i in fast))
            fast = str(sum(int(i) ** 2 for i in fast))
        return slow == "1"
class Solution:
    def isHappy(self, n: int) -> bool:
        issam = [n]
        while n != 1:
            a = list(str(n))
            n = 0
            for i in a:
                n += pow(int(i),2)
            issam.append(n)
            if len(issam) != len(set(issam)):
                return False
        return True

来源:力扣(LeetCode)

相关文章

  • 46快乐数

    编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字...

  • 倒序切片

    L=range(1,101) print L[-10:]=倒数后十个数 print L[-46::5]=从46开始...

  • 快乐数

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

  • 快乐数

    描述 写一个算法来判断一个数是不是"快乐数"。 一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他...

  • 快乐数

  • 快乐数

    题目: 题目的理解: 分解整数,平方和,分解整数。 python实现 想看最优解法移步此处 提交 // END 当...

  • 快乐数

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

  • 快乐数

    题目描述 https://leetcode-cn.com/problems/happy-number/ 解 思路 ...

  • 快乐数

    202. 快乐数[https://leetcode.cn/problems/happy-number/] 题目编写...

  • 叶子姑娘自律100天挑战Day46

    #叶子姑娘自律100天挑战Day 46 2019.3.1 Day46 #目标1# 步数一万,但是今天干了不少体力活...

网友评论

      本文标题:46快乐数

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