• 【Leetcode】202. 快乐数


    题目

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

    「快乐数」 定义为:

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

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

    示例 1:

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

    示例 2:

    输入:n = 2
    输出:false

    思路

    这道题目看上去貌似一道数学问题,其实并不是!

    题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!

    正如:关于哈希表,你该了解这些! (opens new window)中所说,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。

    所以这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。

    判断sum是否重复出现就可以使用unordered_set

    还有一个难点就是求和的过程,如果对取数值各个位上的单数操作不熟悉的话,做这道题也会比较艰难。

    1. class Solution(object):
    2. def isHappy(self, n):
    3. """
    4. :type n: int
    5. :rtype: bool
    6. """
    7. seen = []
    8. while n!=1:
    9. n = sum(int(i)**2 for i in str(n))
    10. if n in seen:
    11. return False
    12. seen.append(n)
    13. return True

  • 相关阅读:
    centos ubuntu debian
    自适应滤波算法及例程
    Vuex源码解析
    Elasticsearch
    忘记MySQL密码
    C语言K&R圣经笔记 2.4声明 2.5算术操作符 2.6关系和逻辑操作符
    I.MX6U ALPHA裸机开发
    javaFx DialogPane 对话框
    麻了,这让人绝望的大事务提交
    5-1 Dataset和DataLoader
  • 原文地址:https://blog.csdn.net/weixin_42322991/article/details/134259543