Skip to content

初级算法 数学

Fizz Buzz

js
var fizzBuzz = function(n) {
    let result = []
    for(let i = 1; i <= n; i++){
        let temp = i.toString()
        let fizz = temp % 3 == 0
        let buzz = temp % 5 == 0
        if(fizz) temp = "Fizz"
        if(buzz) temp = "Buzz"
        if(fizz && buzz) temp = "FizzBuzz"
        result.push(temp)
    }
    return result;
};

计数质数

要得到自然数n以内的全部素数,必须把不大于根号n 的所有素数的倍数剔除,剩下的就是素数。

埃拉托斯特尼筛法

js
var countPrimes = function(n) {
    let arr = new Array(n).fill(0)
    let count = 0
    for(let i = 2 ; i < n; i++){
      if(arr[i]) continue
        count++
        for(let j = i * i; j < n; j+=i){
            arr[j] = 1
        }
    }
    return count
};

3的幂

给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。

整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3x

js
var isPowerOfThree = function(n) {
    return (Math.log(n) / Math.log(3)) % 1 < 0.0000000001 
};

罗马数字转整数

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

例如, 罗马数字 2 写做 II ,即为两个并列的 1 。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

给定一个罗马数字,将其转换成整数。

题目数据保证 s 是一个有效的罗马数字,且表示整数在范围 [1, 3999] 内

js
var romanToInt = function(s) {
    let stack = s.split("");
    const map = {
        "I": 1,
        "V": 5,
        "X": 10,
        "L": 50,
        "C": 100,
        "D": 500,
        "M": 1000,
    }
    let result = 0
    let max = 0
    while(stack.length){
        let char = stack.pop()
        let num = map[char]
        if ( num >= max ) {
            result += num
            max = num
        } else {
            result -= num
        }
    }
    return result;
};