[LeetCode] 202. 快乐数

题目链接:https://leetcode-cn.com/problems/happy-number/

题目描述:

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

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

示例:

输入: 19
输出: true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 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"

原文地址:https://www.cnblogs.com/powercai/p/11370286.html

时间: 2024-10-02 19:55:41

[LeetCode] 202. 快乐数的相关文章

leetcode——202.快乐数

别人好聪明,为什么我只能想到思路但是却实现不出来.... 还是得多做才会吧 class Solution: def isHappy(self, n: int) -> bool: n=str(n) v=set() while 1: n=str(sum(int(i)**2 for i in n)) if n=='1': return True if n in v: return False v.add(n) 执行用时 :32 ms, 在所有 Python3 提交中击败了100.00%的用户 内存消耗

力扣(LeetCode)202. 快乐数

编写一个算法来判断一个数是不是"快乐数". 一个"快乐数"定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1.如果可以变为 1,那么这个数就是快乐数. 示例: 输入: 19 输出: true 解释: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1 思路1 经测试,如果一个数不是快乐数,那么至多经过八次就会进入循环.

202. 快乐数 | Happy Number

Write an algorithm to determine if a number is "happy". A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the

202. 快乐数

编写一个算法来判断一个数是不是“快乐数”. 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1.如果可以变为 1,那么这个数就是快乐数. 示例: 输入: 19 输出: true 解释: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1 我的解决方法: class Solution { public boolean isHappy(i

LeetCode:Happy Number - 快乐数

1.题目名称 Happy Number(快乐数) 2.题目地址 https://leetcode.com/problems/happy-number/ 3.题目内容 英文: Write an algorithm to determine if a number is "happy". A happy number is a number defined by the following process: Starting with any positive integer, repla

[LeetCode系列]卡特兰数(Catalan Number) 在求解独特二叉搜寻树(Unique Binary Search Tree)中的应用分析

本文原题: LeetCode. 给定 n, 求解独特二叉搜寻树 (binary search trees) 的个数. 什么是二叉搜寻树? 二叉查找树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 它的左.右子树也分别为二叉排序树. 举个栗子,给定 n = 3, 共有 5 个. 1 3 3 2 1 \ / / / \ 3 2 1 1

A12:快乐数

发现快乐数有如下特征: 1.如果一个数"不快乐",则它计算到后面必然陷入到这个循环里:4, 16, 37, 58, 89, 145, 42, 20, 4, ... 2.对于一个大于243的数字来说,它的下一个数字一定比它小.这是因为一个大于1000的数字,它的下一个数字一定比它小,而对于1000以下最大的数字999,它的下一个数字是243,所以1000以下数字的下一个数字也只可能小于或等于243 写一个算法来判断一个数是不是"快乐数". 一个数是不是快乐是这么定义的

LintCode_488 快乐数

题目 写一个算法来判断一个数是不是"快乐数". 一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1.如果可以变为1,那么这个数就是快乐数. 样例 19 就是一个快乐数. 1^2 + 9^2 = 82 8^2 + 2^2 = 68 6^2 + 8^2 = 100 1^2 + 0^2 + 0^2 = 1 hash方式实现C++代码 bool isHappy(int n) { // Writ

快乐数问题

问题描述:设计一个算法,判断一个数字是否是“快乐数”.快乐数的定义如下:一个正整数,计算出它各位数字的平方和,得到一个新的数字,再对这个新的数字重复这一过程,直到最后得到数字1或是其他某几个数字的无限循环.在这些数字中,经过上述流程最终能得到数字1的数字,被称为“快乐数”. 分析:整个算法的设计分为两步 第一步:求数下一个平方计算后的数. 第二步:判断数值是否是快乐数. 解法一:分两步进行,第一步计算下一个数,第二步做判断,可以利用一个容器保存计算过的数,只要出现1就直接返回是,如果出现重复的非