LintCode前十题中JavaScript的题目解析

领扣官网

LintCode前十题中JavaScript的题目解析_第1张图片
打对号的为JS可以做的题目,其他的只能用C、C++、Java或Python等后端语言去写。

1、A + B 问题

LintCode前十题中JavaScript的题目解析_第2张图片
当两个数不同时,a + b = (a ^ 2 - b ^ 2)/(a - b);
当两个数相同时,a + b = 2 * a 或者 2 * b;

const aplusb = function (a, b) {
    if(a === b) return 2 * a
    else return (Math.pow(a,2)-Math.pow(b,2)) / (a-b)
}

2、尾部的零

LintCode前十题中JavaScript的题目解析_第3张图片
既然他让求多少个零, 那么, 在什么情况下能够得到 0 呢?

当然, 出现 5 的倍数的情况下, 不就会出现一个 0 吗? (5 x 2 = 10)

那么出现 5^2 的时候, 将会出现 00 的情况 (25 x 4 = 100)

const trailingZeros = function (n) {
    var res = 0;
    while(n>0) {
        n=parseInt(n/5);
        res+=n;
    }
    return res
}

3、统计数字

LintCode前十题中JavaScript的题目解析_第4张图片
首先输入一个数字,我们要得到从0到这个数字的遍历,于是创建一个数组arr,得到遍历,之后转化成字符串,只需要看我们要查找的数字再这个字符串中出现几次就可以了。

const digitCounts = function (k, n) {
    let arr = [];
    for (let i=0; i<=n; i++) { arr.push(i) }
    arr = arr.join('').split('') // 数组转字符串再转回数组
    let flag = 0
    for( let i = 0; i < arr.length; i++) {
        if(k == arr[i]) flag++
    }
    return flag
}

4、丑数 II

LintCode前十题中JavaScript的题目解析_第5张图片
这里百度了一下什么叫丑数:

说法一(ugly number):把只包含质因子2,3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但7、14不是,因为它们包含质因子7。 习惯上我们把1当做是第一个丑数。

说法二(humble number):对于一给定的素数集合 S = {p1, p2, …, pK},考虑一个正整数集合,该集合中任一元素的质因数全部属于S。这个正整数集合包括,p1、p1p2、p1p1、p1p2p3…(还有其它)。该集合被称为S集合的“丑数集合”。

根据题目的解释,应该更贴近说法一。

const nthUglyNumber = function (n) {
    if(n === 0) return 0;
    let uglyNum = [1];
    let t2 = 0,t3 = 0,t5 = 0;
    for(let i=1; i<n; i++){
        uglyNum[i] = Math.min(uglyNum[t2]*2,uglyNum[t3]*3,uglyNum[t5]*5);
        if(uglyNum[i] === uglyNum[t2] * 2) t2++;
        if(uglyNum[i] === uglyNum[t3] * 3) t3++;
        if(uglyNum[i] === uglyNum[t5] * 5) t5++;
    }
    return uglyNum[n - 1];
}

5、第k大元素

LintCode前十题中JavaScript的题目解析_第6张图片
本题为个人认为前十题中相对其他题目比较简单的一题了,首先输入的是一个数组,利用sort对数组进行排序,然后直接输出第k大元素,治理注意要对应索引。

const kthLargestElement = function (n, nums) {
    return nums.sort((a, b) => b - a)[n - 1]
}

6、合并排序数组 II

LintCode前十题中JavaScript的题目解析_第7张图片
先用concat合并数组,再用sort函数进行排序,sort函数对数组进行快速排序大家一定要会用哦~

const mergeSortedArray = function (A, B) {
    return A.concat(B).sort((a,b)=>a-b)
}

9、Fizz Buzz 问题

LintCode前十题中JavaScript的题目解析_第8张图片
这里按照题目的逻辑写就可以了。

const fizzBuzz = function (n) {
    var arr = []
    while (n!==0){
        if(n%3===0&&n%5!==0) arr.push('fizz')
        else if(n%5===0&&n%3!==0) arr.push ('buzz')
        else if(n%15===0) arr.push('fizz buzz')
        else arr.push(String(n))
        n--
    }
    return arr.reverse()
}
Learn More Do More !

你可能感兴趣的:(JavaScript,notes,算法,js)