【刷题日记】728. 自除数

简介: 本次刷题日记的第 20 篇,力扣题为:728. 自除数 ,简单

【刷题日记】728. 自除数

本次刷题日记的第 20 篇,力扣题为:728. 自除数简单

一、题目描述:

image.png

补作业的最后一题,咱们来一个简单轻松的题来结束本次刷题吧,让咱们心情愉悦一点,上班带薪刷题


简单题也并不简单,很多时候看到简单题,我们总会考虑如何使用比较好的技巧来完成一道题的实现,如果没有技巧的话,我们也会使用暴力求解

二、这道题考察了什么思想?你的思路是什么?

我们还是来分析一下这道题是要给我们说些啥,可能乍一看,还会有点没看明白:

  • 我们要明白自除数的定义,例如体重给出的 128 ,他是自除数,是因为他满足 128 对于 1 ,2 ,8 这 3 个数能正常的整除,满足这个条件的数,那就是自除数
  • 有一点一定要注意,自除数,一定要注意不能含 0.也就是说类似于 108,120 这样的数字都是不满足自除数的
  • 题目是给我们一个数据区间,我们需要筛选出这个区间内的自除数

这样看来就比较明确了,知道啥是自除数,题目需要啥,我们就想办法给他就可以了,接下来我们还是来用示例推演一下:

示例:left = 1, right = 22

拿几个数举个例子

image.png

按照上述的例子,我们其实就可以傻瓜式的对于一个数,一位一位的取看是否满足条件,若每一位数都满足条件,那么这个数字就是满足条件的

所以这个时候,我们就只需要去找题目中给出的数字,有多少是满足条件的,抠出来就可以了


三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码,翻译代码的时候,需要注意数字中是否有 0 ,若是有 0 的话,那么这个数直接就不是自除数

编码如下:

// 定义一个 helper 函数,来确认给进来的数是否是自除数
func helper(num int) bool {
    for tmp := num; tmp>0; tmp=tmp/10 {
        // 获取给出数字的每一位,校验是否等于 0 ,等于0 则不符合题意, 还要校验给出的数是否可以整除他的每一位
        if x:=tmp%10; x==0 || num % x !=0{
            return false
        }
    }
    return true
}
func selfDividingNumbers(left int, right int) []int {
    res := make([]int,0)
    // 查看题目给出的列表中,哪些数字是符合条件的
    for i:=left; i<=right; i++ {
        if helper(i) {
            res = append(res,i)
        }
    }
    return res
}

看了上述编码,还是比较清晰的吧,编码的逻辑和推演的逻辑一致,但是我们可以看出来这是比较笨的一种方法,暴力求解,日后有比较好的技巧,我再来分享一波


四、总结:

该题的时间复杂度是 O(nlog right),这个 n 是所给区间的数量,**空间复杂度是 O(1) ,我们只引入了常数级别的空间消耗

原题地址:728. 自除数

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~



相关文章
|
6月前
|
容器
《剑指offer》——刷题日记
《剑指offer》——刷题日记
|
6月前
|
C语言
蓝桥杯练习题
蓝桥杯练习题包括6道C语言编程题:1. 判断三位数是否为水仙花数;2. 输出区间质因数分解;3. 将秒转换为&#39;H:M:S&#39;格式;4. 判断闰年;5. 删除可被整除元素并排序数组,数字转字母;6. 分类比较两个字符串关系。每题涉及不同逻辑操作,适合编程初学者练习。
50 3
|
6月前
|
存储 索引 Python
LeetCode刷题笔记(1)—— 两数之和
LeetCode刷题笔记(1)—— 两数之和
|
6月前
|
算法 Java
刷题专栏(二十五):有效的完全平方数
刷题专栏(二十五):有效的完全平方数
182 2
|
6月前
|
算法
刷题专栏(十六):丑数
刷题专栏(十六):丑数
61 0
|
6月前
|
算法
刷题专栏(十五):各位相加
刷题专栏(十五):各位相加
54 0
|
6月前
|
算法
刷题专栏(二十二):3 的幂
刷题专栏(二十二):3 的幂
121 0
|
前端开发 C语言 Cloud Native
【刷题日记】2. 两数相加
本次刷题日记的第 6 篇,力扣题为:2. 两数相加 ,中等
|
Cloud Native
【刷题日记】70. 爬楼梯
本次刷题日记的第 10 篇,力扣题为:70. 爬楼梯 ,简单
|
算法 测试技术 Cloud Native
【刷题日记】2104. 子数组范围和
对于很久没有刷题的我来说,突然开始也开始刷题了,不为别的,已经习惯参与掘金的活动了,同时也可以促进自己再回顾一下算法题,毕竟长时间不练,真的就生疏了