LeetCode面试系列 第4天:No.202 - 快乐数

或许你不知道的是,Leetcode 中是有很多 数学题 的,本文要解析的题 快乐数 就是其中到一个典型问题,本题将基于数据结构 set 来求解。

今天要给大家分析的面试题是 LeetCode 上第 202 号问题,

LeetCode - 202. 快乐数

https://leetcode-cn.com/problems/happy-number/

题目描述

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

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

示例:

  1. 输入: 19

  2. 输出: true

解释:

  • 贡献者: LeetCode

  • 题目难度: Easy

  • 相关话题

相关话题

  • 哈希表

    https://leetcode-cn.com/tag/hash-table/

  • 数学

    https://leetcode-cn.com/tag/math

相似题目

  • 各位相加

    https://leetcode-cn.com/problems/add-digits/  难度: 简单

  • 丑数

    https://leetcode-cn.com/problems/ugly-number/  难度: 简单


解题思路:

中学数学中我们学到一个概念集合(英文是set),集合的最大特点是元素不能重复。Python中,set是一组key的集合。

于是可以使用迭代法和set这种数据结构来求解此题。

具体操作为: 迭代地求给定数的各位数字的平方和,维护一个set,迭代循环的出口是平方和为1或已在set中出现过。

AC的代码为:

  1. class Solution:

  2. def isHappy(self, n: int) -> bool:

  3. unhappy = set()

  4. while n not in unhappy and n != 1:

  5. unhappy.add(n)

  6. n = self.GetSquareSum(n)

  7. return n == 1

  8. def GetSquareSum(self, n: int) -> bool:

  9. sum0 = 0

  10. while n > 0:

  11. r = n - int(n/10)*10

  12. n = int(n/10)

  13. sum0 += r * r

  14. return sum0

运行结果:

执行用时 : 36ms, 在所有 Python3 提交中击败了 99.72%的用户

代码要点:

  • Python 中 "/" 并不是 C 语言中的 "/"(整除),Python 中 / 的结果是浮点数,如果需要得到整数,需使用 "//",也可使用 int() 函数来处理

  • Python的 同一个 class 中一个函数 a 调用另一个函数 b,只需使用关键字 def 定义好函数 a 和 函数 b,在 a 中使用 self.b 即可

相应的,如需测试,本地可执行的代码为:

  1. class Solution:

  2. def isHappy(self, n: int) -> bool:

  3. unhappy = set()

  4. while n not in unhappy and n != 1:

  5. unhappy.add(n)

  6. n = self.GetSquareSum(n)

  7. return n == 1

  8. def GetSquareSum(self, n: int) -> bool:

  9. sum0 = 0

  10. while n > 0:

  11. r = n - int(n/10)*10

  12. n = int(n/10)

  13. sum0 += r * r

  14. return sum0

  15. sol = Solution()

  16. print(sol.isHappy(19))

系列文章
(0)

相关推荐

  • Python 运算符重载

    https://www.cnblogs.com/hotbaby/p/4913363.htmlPython 运算符重载构造函数与表达式: __init__, __sub__ 常见运算符重载方法metho ...

  • python笔记53-Leetcode面试题

    前言 Leetcode上有个练习题,也是面试经常会遇到的:请实现一个函数,把字符串 s 中的每个空格替换成"%20" 替换字符串 请实现一个函数,把字符串 s 中的每个空格替换成& ...

  • Python 基本数据类型介绍

    " 数据是业务的核心,任何编程语言都要支持各种数据类型.我们一起来学习一下 Python 支持的数据类型" Python 内置了 numeric.string 和 Boolean ...

  • Leetcode面试系列 第1天:Leetcode 89 - 格雷码

    最近,打算花点时间写个 Python 解决 Leetcode 题的系列文章~ 大家是否还记得电影黑客帝国中的数字雨林的场景?事实上,计算机底层数据的存储和运算都是二进制的,因而面试题环节中面试官也经常 ...

  • LeetCode面试系列 第2天:No.136 - 只出现一次的数

    LeetCode面试题题系列的上一篇文章 Leetcode面试系列 第1天:Leetcode 89 - 格雷码 中,我们介绍了 二进制相关 的一个典型题. 今天呢,咱们来聊聊哈希表(字典),这是另一种 ...

  • LeetCode面试系列 第3天:No.67 - 二进制数求和

    大家都知道 LeetCode 中的第一道题是 Two Sum,比较简单.我们今天决定挑一个与之类似,但难度稍大于之的问题 二进制之和来分析,其中涉及到的主要知识是 Python 中的 进制转换,比如后 ...

  • LeetCode面试系列 第5天:No.204 - 统计质数

    在上篇算法题的文章中,我们介绍了 LeetCode 中的一道数学题 - 快乐数 .今天,我们来聊聊质数(英文是Prime,也称为素数)相关的面试题.以前很多编程书上会有个经典问题,即判断一个数是否是质 ...

  • LeetCode面试系列 第6天:No.9 - 回文数

    上一篇面试题中,我们使用了 埃拉托斯特尼筛法 去统计给定范围内质数的个数(LeetCode No.204),还是有点烧脑的.今天我们来分析一道相对轻松的字符串面试题吧,恰好大家从Python 100天 ...

  • LeetCode面试系列 第7天:No.13 - 罗马数字转整数

    上一篇 LeetCode 面试题中,我们分析了一道轻松的字符串面试题 - 回文数.今天我们来分析一道将数学和字符串结合起来的的面试题. Leetcode 今天要给大家分析的面试题是 LeetCode ...

  • LeetCode面试系列 第8天:No.58 - 最后一个单词的长度

    上一篇 LeetCode 面试题中,我们分析了一道将数学和字符串结合起来的的面试题,今天我们再来分析了一道轻松的字符串面试题吧~ Leetcode 今天要给大家分析的面试题是 LeetCode 上第 ...

  • LeetCode面试系列 第9天:No.345 - 反转字符串中的元音字母

    上一篇 LeetCode 面试题中,我们分析了一道相对轻松的字符串面试题 - 最后一个单词的长度.今天,我们接着来看另一道字符串的算法题吧. Leet code 今天要给大家分析的面试题是 LeetC ...

  • LeetCode面试系列 第10天:No.976 - 三角形的最大周长

    上一篇 LeetCode 面试题中,我们分析了一道字符串的算法题 - 反转字符串中的元音字母,今天我们来分析一道简单的几何题吧. Leetcode 今天要给大家分析的面试题是 LeetCode 上第 ...