百词斩2018春招笔试题解

虽然很菜,但是题解还是要写的。一来总结反思。二来优化代码,三来混件T-shirt.
第一题:
输入一串只有数字和字母的字符串,输出该字符串中最大的数字
输入:hellowolrd520helloworld1314
输出:1314
看了楼下的,觉得我之前做的方法太菜啦,我的正则表达式还是用的不熟练,
用的熟练的可以减少很多不必要的代码
参考代码1:
let str= 'hellowolrd520helloworld1314';
let reg=/[a-z]+/;
let arr=str.split(reg);
let max=Math.max(...arr);
console.log(max);
参考代码2:
let str= 'hellowolrd520helloworld1314';
let reg=/\d+/g;
let arr=str.match(reg);
let max=Math.max(...arr);
console.log(max);

第二题:
一个星期有7天,按照下面格式输出。
输入:1 3 4 5 7
//全是升序输入,最大长度为7
输出:1,3-5,7
//三个以上(包括三个)的连续的用-输出
参考代码
let arr=[1,3,4,5,7];
function getRes(arr) {
    let res=[];
    for(let i=0;i<arr.length;i++){
        if(arr[i]+1==arr[i+1]){
            res.push(arr[i]);
            res.push(arr[i+1])
        }
    }
    res=[...new Set(res)];//去重
    if(res.length>=3){
        let i=arr.indexOf(res[0]);
        let j=arr.indexOf(res[res.length-1]);
        let tmp="";
        tmp=res[0]+"-"+res[res.length-1];
        arr.splice(i,j-i+1,tmp);//将原数组中的数字用转换过后的格式替换掉
    }
    return arr;
}
console.log(getRes(arr).join(","));

第三题:
输入为n个数,输出为n个数的全排列所产生的不同的数,并且要求升序。
输入:第一行为n,接下来为n行要排列组合的数。
3
1
5
9
输出
159
195
519
591
915
951

思考:
我们要得到全排列,只要像冒泡一样交换各个位就行,不过要注意取模达到重复效果。循环次数为全排列种类数。举例如下
159,交换1和2,得519
519,交换2和3,得591
591,交换1和2,得951
951,交换2和3,得915
915,交换1和2,得195
195,交换2和3,得159

参考代码:
let x=[1,5,9],res=[];
function getNum(v) {
     return v?getNum(v-1)*v:1;
}
m=getNum(x.length);//全排列种类数
let k=0;
while(m--){
    let tmp="";
    x.forEach(i=>{tmp+=i});
    res.push(tmp);
    [x[k],x[k+1]]=[x[k+1],x[k]];
    k=(++k%(x.length-1));
}
res.sort((a,b)=>a-b);
res.forEach(i=>console.log(i));



#春招##百词斩#
全部评论
第一题感觉可以这么写啊 let s = 'helloworld520helloworld1314dsajkdh5210'; let arr = s.match(/([0-9])\d+/g); console.log(Math.max(...arr));
点赞 回复 分享
发布于 2018-03-25 21:44
大佬同js。可以加个好友么?一起交流
点赞 回复 分享
发布于 2018-03-25 19:56
第一个用split配合正则代码量最少
点赞 回复 分享
发布于 2018-03-25 20:49
第二题什么意思
点赞 回复 分享
发布于 2018-03-29 10:57
大佬,笔试题是只有编程题嘛? 有没有选择题呀?
点赞 回复 分享
发布于 2019-09-23 21:00
小吴,第二题的算法有错哦,只考虑了最简单的情况,只有一个连续串的情况。个人觉得前一半代码没问题,后面那段if块要修改一下😃 ``` let arr = [3, 4, 5, 7, 8, 9, 10]; function getRes(arr) {     let res = [];     let temp = [];     for (let i = 0; i < arr.length; i++) {         if (arr[i] + 1 == arr[i + 1]) {             temp.push(arr[i]);             temp.push(arr[i + 1])         } else {             res.push([...temp]);             temp.length = 0;         }     }     res = res.map(serie => [...new Set(serie)]);     res.forEach(serie => {         if (serie.length >= 3) {             let i = arr.indexOf(serie[0]);             let j = arr.indexOf(serie[serie.length - 1]);             let tmp = "";             tmp = serie[0] + "-" + serie[serie.length - 1];             arr.splice(i, j - i + 1, tmp);//将原数组中的数字用转换过后的格式替换掉         }     });     return arr; } console.log(getRes(arr).join(",")); ```
点赞 回复 分享
发布于 2020-07-07 15:40

相关推荐

点赞 评论 收藏
分享
5 47 评论
分享
牛客网
牛客企业服务