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

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

题目描述

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

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

示例:

  1. 输入:19
  2. 输出:true


解释:


image.png


  • 贡献者: LeetCode

  • 题目难度: Easy


  • 相关话题

相关话题



相似题目



解题思路:

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

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

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


AC的代码为:

  1. classSolution:
  2.    def isHappy(self, n: int)-> bool:
  3.        unhappy = set()
  4.        while n notin unhappy and n !=1:
  5.            unhappy.add(n)
  6.            n = self.GetSquareSum(n)
  7.        return n ==1    

  8.    defGetSquareSum(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. classSolution:
  2.    def isHappy(self, n: int)-> bool:
  3.        unhappy = set()
  4.        while n notin unhappy and n !=1:
  5.            unhappy.add(n)
  6.            n = self.GetSquareSum(n)
  7.        return n ==1    

  8.    defGetSquareSum(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))


系列文章        


目录
相关文章
|
3月前
|
开发者 索引 Python
这些年背过的面试题——LeetCode
本文是技术人面试系列LeetCode篇,一文带你详细了解,欢迎收藏!
|
4月前
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
|
4月前
|
存储 算法 索引
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
|
4月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
|
5月前
|
存储 算法 数据挖掘
深入解析力扣168题:Excel表列名称(进制转换法详解及模拟面试问答)
深入解析力扣168题:Excel表列名称(进制转换法详解及模拟面试问答)
|
5月前
|
存储 算法 数据挖掘
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
深入解析力扣166题:分数到小数(模拟长除法与字符串操作详解及模拟面试问答)
|
5月前
|
SQL 算法 大数据
深入解析力扣176题:第二高的薪水(子查询与LIMIT详解及模拟面试问答)
深入解析力扣176题:第二高的薪水(子查询与LIMIT详解及模拟面试问答)
|
5月前
|
算法 数据挖掘 大数据
深入解析力扣172题:阶乘后的零(计算因子5的方法详解及模拟面试问答)
深入解析力扣172题:阶乘后的零(计算因子5的方法详解及模拟面试问答)
|
5月前
|
算法 数据挖掘 大数据
深入解析力扣171题:Excel表列序号(进制转换法详解及模拟面试问答)
深入解析力扣171题:Excel表列序号(进制转换法详解及模拟面试问答)
|
5月前
|
算法 数据挖掘 Java
深入解析力扣167题:两数之和 II(双指针法详解及模拟面试问答)
深入解析力扣167题:两数之和 II(双指针法详解及模拟面试问答)