【LeetCode】728. 自除数

126 阅读1分钟

image.png

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

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

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

一、题目描述:

  • 题目内容

    image.png

  • 题目示例

    image.png

  • 题目解析

    • 本题给定left~right范围值的自除数
    • 自除数时指可以被其包含的每一位整除的数。
    • 自除数不允许保护0
    • left与right大小关系:1 <= left <= right <= 104

二、思路分析:

我们拿到本题,在之前我们刷过关于交替二进制类似。我们以128来模拟自除数:

image.png

接下来,我们就有了思路大致如下:

  • 定义一个列表L_mode来存储符合自除数的数
  • for 循环去 left 和 right+1之间的范围的数字
  • 当每取一个数num时,赋值给一个临时变量进行取余操作得到pre
  • 当取余等于0,或者 num 对 pre进行取余不等于0时,则退出num取余操作
  • 当符合自除数,则L_mode.append()添加

image.png

class Solution(object):
    def selfDividingNumbers(self, left, right):
        """
        :type left: int
        :type right: int
        :rtype: List[int]
        """

        L_mode = []

        for num in range(left,right+1):

            res = True
            num_tmp = num

            while num_tmp :

                pre = num_tmp % 10

                if pre == 0 or num % pre !=0:
                    res = False
                    break
                num_tmp = num_tmp / 10
            if res:
                L_mode.append(num)
        return L_mode

三、总结:

本题,仍然考验我们进制取模方法,AC记录如下:

image.png

时间复杂度O(nlogn),空间复杂度O(n),使用一个列表来存储满足要求的值

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