【LeetCode】202. 快乐数

137 阅读2分钟

image.png

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

    image.png

  • 题目示例

    image.png

  • 题目解析

    • 本题给出一个正整数,范围在2^31-1
    • 要对整数每一位进行平方和计算
    • 直到该数每一位的平方和值为1,则返回True,否则返回False。

二、思路分析:

我们拿到本题,脑袋已经对快乐数的定义有了大概地了解,目前困扰是如何判断不是快乐数?

快乐数对每一位平方和,直到计算出其值等于1

不是快乐数的话,会一直无限循环,什么时候才是头呀?,我们对示例2进行演算看看。

image.png

如上图,当我们发现就算出的平方和再次等于转入数字的平方时,这个时候我们直接就返回False,结束后续的循环。

接下来,如何计算将每一位进行平方和计算呢?

最简单粗暴的想法,就是先转换成字符串,然后在for循环遍历每个字符进行平方然后再相加。

然而,现实不允许我们这样做,结果直接给出 超出时间限制

那我们还是需要使用进制运算,十进制运算。

image.png

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记录如下:

image.png

时间复杂度O(logn),空间复杂度O(n),引入一个列表

这一题,我们这次是用纯数学的方法进行计算。看大佬的题解,还可以使用双指针来进行解。

以上是本期内容,欢迎大佬们点赞评论,下期见~~