leetCode: 728. 自除数

214 阅读1分钟
问题描述:
自除数 是指可以被它包含的每一位数除尽的数。
例如,128 是一个自除数,因为 128 % 1 == 0128 % 2 == 0128 % 8 == 0。
还有,自除数不允许包含 0 。
给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。

输入: 
上边界left = 1, 下边界right = 22
输出: [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 15, 22]
解法:
var selfDividingNumbers = function(left, right) {
    return  Array.from({length: right-left + 1 })
                .map((item, index) => left +index)
                .filter(item => !String(item).includes('0'))
                .filter((item,index) =>(String(item)
                .split(/\B/).map(cur => item % cur == 0)
                .reduce((acc, c) => acc && c, true)                                     
    ))
};

leetCode-natural_numbers.bmp

代码解析:
Array.from({length: right-left + 1 })
     .map((item, index) => left +index) //初始化一个长度为 right - left + 1 的递增数组
     .filter(item => !String(item).includes('0')) //过滤到含有 0 的数
     .filter((item,index) =>(String(item)
     .split(/\B/).map(cur => item % cur == 0) // 将数字拆开 百分位 十分位 个位且用本身去整除得到[true, true, fales, true]的类似数组
     .reduce((acc, c) => acc && c, true) // 将输出给filter true 用于过滤
总结:
空间复杂度和时间复杂度太差



来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/se…