FFC:进阶算法题

1. Sum All Numbers in a Range

求指定范围内所有数组之和

思路:

  1. 先区分传入的两个参数大小关系
  2. 使用变量 sum 来保存结果
  3. 以 min 为底数,max为上限,循环累加
function sumAll(arr) {
    var max = Math.max(...arr);
    var min = Math.min(...arr);

    var sum = 0;

    for (var i = min; i <= max; i++){
        sum += i;
    }

    return sum;
}

console.log(sumAll(5, 1)); // => 15

2. Diff Two Arrays

比较两个数组,然后返回一个新数组,该数组的元素为两个给定数组中所有独有的数组元素。

思路:

  1. 使用 .indexOf()-1 检测是否不包含元素,即独立的数组元素
  2. 结合 .filter() 方法对 arr1、arr2 过滤出独立元素
function diff(arr1, arr2) {

    var to1 = arr1.filter(function(item){
        return arr2.indexOf(item) == -1;  // 返回第一个数组在第二个数组中不同的项
    }

    var to2 = arr2.filter(function(item){
        return arr1.indexOf(item) == -1;  // 返回第二个数组在第一个数组中不同的项
    }

    return to1.concat(to2);
}

// 简写
function diff(arr1, arr2) {

    return arr1.filter(function(item){
        return arr2.indexOf(item) == -1;
    }).concat(arr2.filter(function(item){
        return arr1.indexOf(item) == -1;
    }));

}

3. Roman Numeral Converter

将给定的数字转换成罗马数字

function convert(num) {

    if (num <= 0) return ""; // 不转换 0 和 负值

    var numArr = [1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000];
    var strArr = ["I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"];

    var result = "";

    var i = numArr.length;
    while (i >= 0) {
        if (num >= numArr[i]) {
            result += strArr[i];
            num -= numArr[i];
        } else {
            i--;
        }
    }

    return result;
}
convert(100);

4. Where art thou

5. Search and Replace

6. Pig Latin

7. DNA Pairing

8. Missing letters

9. Boo who

10. Sorted Union

11. Convert HTML Entities

12. Spinal Tap Case

13. Sum All Odd Fibonacci Numbers

14. Sum All Primes

15. Smallest Common Multiple

16. Finders Keepers

17. Drop it

18. Steamroller

19. Binary Agents

20. Everything Be True

21. Arguments Optional

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值