码迷,mamicode.com
首页 > Windows程序 > 详细

超级丑数--用查找的api解决

时间:2020-01-27 20:37:04      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:efault   script   push   i++   ===   说明   get   code   turn   

技术图片
技术图片

class Ugly {
  constructor(n, primes) {
    this.n = n
    this.primes = primes
  }
  getAll() {
    // 超级丑数列表
    let res = [1]
    let i = 2
    let primes = this.primes
    // 不知道上限用while循环
    while (res.length < this.n) {
      let arr = Ugly.getPrimies(i)
      let k = 0
      let l = arr.length
      for (; k < l; k++) {
        if (!primes.find(item => item === arr[k])) {
          break
        }
      }
      // k===l有两种情况,1.压根没有质因数,2.质因数都在指定列表中
      if (k === l) {
        if (l === 0) {
          if (primes.find(item => item === i)) {
            res.push(i)
          }
        } else {
          res.push(i)
        }
      }
      i++
    }
    // 返回丑数数组
    return res[this.n - 1]
  }
  // 计算指定正整数n的质因数
  static getPrimies(n) {
    let prime = (n) => {
      let arr = []
      for (let i = 2; i < n / 2 + 1; i++) {
        // 求质数利用递归,因为返回的是一个arr数组,当数组为空时说明是质数
        if (n % i === 0 && !prime(i).length) {
          arr.push(i)
        }
      }
      return arr
    }
    return prime(n)
  }
}

export default Ugly

超级丑数--用查找的api解决

标签:efault   script   push   i++   ===   说明   get   code   turn   

原文地址:https://www.cnblogs.com/ygjzs/p/12236749.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!