收集一些很有意思的算法(伪)题

356 阅读2分钟

输入:“get1_install2_app3_list4_by5_android6”(每个单词后面总会携带一个数字,只有偶数才删掉),我不用循环只用正则怎么实现输出"get1InstallApp3ListBy5Android"?

function regroup(str) {
    // 每个都是字母+数字+_,下划线先不管,取出匹配的字符串
    let result = str.replace(/[a-z]+\d/g, function (match) {
    // 每个字符串首字母大写
        let bufStr = match.slice(0, 1).toUpperCase() + match.slice(1)
        /判断奇偶数,偶数剔除,基数啥也不干
        if (bufStr[bufStr.length - 1] % 2 === 0) {
            bufStr.slice(0, bufStr.length - 2)
        }
        return bufStr
    })
    // 把最终结果第一个字母转小写,有点闲,同时剔除_,
    return (result.slice(0, 1).toLowerCase() + result.slice(1)).split('_').join("")
}
console.log(regroup('get1_install2_app2_list4_by5_android6'))

不使用任何循环控制语句和迭代器的情况下实现一个0到1000的数组赋值

还算比较简单的一道题,可能有坑

function createArray() {
    return Array.from({ length: 1000 }, (item, index) => {
        return index
    })
}

判断两个对象(注意特殊对象的处理)找出不一致的是哪个变量,返回的格式类似:"root变量-父变量-...-不一致的变量"的字符串;

不会,之后研究研究,根本没看懂想干啥

将一个一维数组按照一定的规律转换成二维数组,具体看图吧,这种题可以涉及到图形业务

输入一个数组(一维的) arr = [1,2,3,4], 每一个数字横纵放大2倍,最终输出一个二维数组
 意思大概就是
  //提示[1,2,3,4]可以看成二维的
   [1,2]   ===>   [1,1,2,2]
   [3,4]          [1,1,2,2]
                  [3,3,4,4]
                  [3,3,4,4]

function EnlargeImg(arr, l, w) {
    // 先把arr转换成二维数组可能会好点
    if (l !== w) return;
    const size = Math.sqrt(arr.length)
    if (Math.floor(size) !== size) return;

    const matrix = []
    const long = size * w;
    for (let a = 0; a < long; a++) {
        matrix.push([])
    }

    for (let x = 0; x < long; x++) {
        for (let y = 0; y < long; y++) {
        // 用行来想如何赋值
            matrix[x][y] = arr[Math.floor(x / w) * size + Math.floor(y / w)]
        }
    }
    console.log(matrix)
}
EnlargeImg([1, 2, 3, 4, 5, 6, 7, 8, 9], 2, 2)