FCC--高级算法

1.Validate US Telephone Numbers

如果传入字符串是一个有效的美国电话号码,则返回 true.

function telephoneCheck(str) {
    return /^1? ?(\d{3}|\(\d{3}\))[ -]?\d{3}[ -]?\d{4}$/.test(str);
}

telephoneCheck("555-555-5555");

2.Symmetric Difference

创建一个函数,接受两个或多个数组,返回所给数组的 对等差分(symmetric difference) (△ or ⊕)数组.

function sym(args) {
    let argsArr = Array.from(arguments);
    let result = argsArr.reduce((arr1, arr2) => {
        var arr1 = dis(arr1);
        var arr2 = dis(arr2);
        return symDif(arr1, arr2);
    }, [])

    return result.sort((a, b) => {
        return a - b;
    });
}

//去除每个数组中重复的数字
dis = (arr) => {
    return arr.filter((item, index, array) => {
        return array.indexOf(item) == index;
    })

}

//两个数组对等差分
symDif = (arr1, arr2) => {
    var newArr = arr1.filter((item) => {
        var index = arr2.indexOf(item);
        if (index < 0) {
            return true;
        } else {
            arr2.splice(index, 1);
            return false;
        }
    });
    return newArr.concat(arr2);
}

sym([1, 2, 3], [5, 2, 1, 4]);

3.Exact Change

设计一个收银程序 checkCashRegister() ,其把购买价格(price)作为第一个参数 , 付款金额 (cash)作为第二个参数, 和收银机中零钱 (cid) 作为第三个参数.

cid 是一个二维数组,存着当前可用的找零.

当收银机中的钱不够找零时返回字符串 "Insufficient Funds". 如果正好则返回字符串 "Closed".

否则, 返回应找回的零钱列表,且由大到小存在二维数组中.

4.Inventory Update

依照一个存着新进货物的二维数组,更新存着现有库存(在 arr1 中)的二维数组. 如果货物已存在则更新数量 . 如果没有对应货物则把其加入到数组中,更新最新的数量. 返回当前的库存数组,且按货物名称的字母顺序排列.

自己验证的时候没问题

function updateInventory(arr1, arr2) {
    // 请保证你的代码考虑到所有情况

    const newArr = curInv.map((item) => item[1]);
    newInv.forEach((item, index, arr) => {
        var i = newArr.indexOf(item[1]);
        if (i >= 0) {
            curInv[i][0] += newInv[index][0];
        } else {
            curInv.push(newInv[index]);
        }
    })

    return curInv.sort((a, b) => {
        return a[1].charCodeAt(0) - b[1].charCodeAt(0);
    });
}

// 仓库库存示例
var curInv = [
    [21, "Bowling Ball"],
    [2, "Dirty Sock"],
    [1, "Hair Pin"],
    [5, "Microphone"]
];

var newInv = [
    [2, "Hair Pin"],
    [3, "Half-Eaten Apple"],
    [67, "Bowling Ball"],
    [7, "Toothpaste"]
];

updateInventory(curInv, newInv);

5.No repeats please
把一个字符串中的字符重新排列生成新的字符串,返回新生成的字符串里没有连续重复字符的字符串个数.连续重复只以单个字符为准

例如, aab 应该返回 2 因为它总共有6中排列 (aab, aab, aba, aba, baa, baa), 但是只有两个 (aba and aba)没有连续重复的字符 (在本例中是 a).

你可能感兴趣的:(FCC--高级算法)