Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。
怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~
一、题目描述:
-
题目内容
-
题目示例
-
题目解析
- 本题给出一个正整数,范围在2^31-1
- 要对整数每一位进行平方和计算
- 直到该数每一位的平方和值为1,则返回True,否则返回False。
二、思路分析:
我们拿到本题,脑袋已经对快乐数的定义有了大概地了解,目前困扰是如何判断不是快乐数?
快乐数对每一位平方和,直到计算出其值等于1
不是快乐数的话,会一直无限循环,什么时候才是头呀?,我们对示例2进行演算看看。
如上图,当我们发现就算出的平方和再次等于转入数字的平方时,这个时候我们直接就返回False,结束后续的循环。
接下来,如何计算将每一位进行平方和计算呢?
最简单粗暴的想法,就是先转换成字符串,然后在for循环遍历每个字符进行平方然后再相加。
然而,现实不允许我们这样做,结果直接给出 超出时间限制
那我们还是需要使用进制运算,十进制运算。
def get_next(n):
tatol = 0
while n :
tatol = tatol+(n%10)*(n%10)
n = n/10
return tatol
我们在调用 get_next()方法进行算出每一次的平方和,引入一个列表L存储每一次平方和。
当 tatol 存在列表,则代表是无限循环的,无法得到1,则返回False
class Solution(object):
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
L = []
while n !=1:
n = get_next(n)
print(n)
if n == 1:
return True
if n in L:
return False
L.append(n)
return True
三、总结:
我们将代码提交,AC记录如下:
时间复杂度O(logn),空间复杂度O(n),引入一个列表
这一题,我们这次是用纯数学的方法进行计算。看大佬的题解,还可以使用双指针来进行解。
以上是本期内容,欢迎大佬们点赞评论,下期见~~