0
点赞
收藏
分享

微信扫一扫

javascript算法学习(一)

少_游 2022-05-05 阅读 102

文章目录

前言

每一周都记录一下学习算法的题目以及解法

1、尾部的零

给定一个整数 n,计算出n!中尾部零的个数。
样例

function trailingZeros(n) {
    let number = 0;
    while (n >= 5) {
        number = number + parseInt(n / 5);
        n = parseInt(n / 5);
    }
    return number;
}
console.log(trailingZeros(10))

2、丑数

如果一个数只有质数因子2,3,5 ,那么这个数是一个丑数。

前10个丑数分别为 1, 2, 3, 4, 5, 6, 8, 9, 10, 12…设计一个算法,找出第N个丑数。

我们可以认为 1 也是一个丑数。
样例

function nthUglyNumber(n) {
    let result = [1];
    let p2 = 0;
    let p3 = 0;
    let p5 = 0;

    for (var i = 0; i < n; i++) {
        let n2 = result[p2] * 2;
        let n3 = result[p3] * 3;
        let n5 = result[p5] * 5;

        let min = Math.min(n2, n3, n5);
        result.push(min);
        if (n2 === min) {
            p2++;
        }
        if (n3 === min) {
            p3++;
        }
        if (n5 === min) {
            p5++;
        }
    }
    return result[n - 1];
}
console.log(nthUglyNumber(5))

3、数字变形

现在题目给出一个字符串数字A。
字符串数字B是A的变形,由字符串数字A的位数交替形成。
依次为A的右数第一位数,左数第一位数,右数第二位数…以此类推,得到字符串数字B。
样例

function distortion(a) {
    let result = ''
    for (let left = 0, right = a.length - 1; left <= right; left++, right--) {
        result += a.charAt(right);
        if (left < right) {
            result += a.charAt(left);
        }
    }
    return result;
}
console.log(distortion('12345678'))

4、统计数字

给定一个数字 k,计算 k 在 0 到 n 中出现的次数,k 可能是 0 到 9 的一个值。
样例

function digitCounts(k, n) {
    let result = []
    for (let i = 0; i <= n; i++) {
        result.push(i)
    }
    result = result.join('').split('')
    return result.filter(item => Number(item) === k).length
}
console.log(digitCounts(1, 12))

5、第k大元素

在数组中找到第 k 大的元素。
样例

function kthLargestElement(k, nums) {
    let arr = nums.sort((a, b) => { return a - b })
    return arr[arr.length - k]
}
console.log(kthLargestElement(3, [9, 3, 2, 4, 8]))

6、 旋转字符

给定一个字符 s 和一个偏移量,根据偏移量原地旋转字符数组(从左向右旋转)
样例

function rotateString(s, offset) {
    if (offset === 0 || offset === s.length) {
        return s
    }
    if (offset < s.length) {
        return s.substr(-offset).concat(s.substr(0, s.length - offset))
    }
    if (offset > s.length) {
        return s.substr(-(offset - s.length)).concat(s.substr(0, s.length - (offset - s.length)))
    }
    //另一种方法
	// if (offset === 0) {
    //     return s
    // }
    // let arr = s.split('')
    // for (let i = 0; i < offset; i++) {
    //     arr.unshift(arr.pop())
    // }
    // return arr.join('')
}

console.log(rotateString('abcdefg', 10))

7、Fizz Buzz问题

给定整数 n ,按照如下规则打印从 1 到 n 的每个数:

  • 如果这个数被3整除,打印fizz。
  • 如果这个数被5整除,打印buzz。
  • 如果这个数能同时被3和5整除,打印fizz buzz。
  • 如果这个数既不能被 3 整除也不能被 5 整除,打印数字本身。

样例

function fizzBuzz(n) {
    const result = []
    for (let i = 1; i <= n; i++) {
        if (i % 15 === 0) result.push('fizz buzz')
        else if (i % 5 === 0) result.push('buzz')
        else if (i % 3 === 0) result.push('fizz')
        else result.push(String(i))
    }
    return result
}
console.log(fizzBuzz(15))
举报

相关推荐

算法学习内容

labuladong算法学习

算法学习笔记

A算法学习总结

初级算法学习

FRC算法学习

算法学习(一)二分查找

0 条评论