编程题整理

1、请用程序判断一个非空字符串是否是由所含的一个子串重复多次组成,字符串只包含小写字母且长度不超过5000。举例:abdeabdeabde,返回true,abdeabdeabd,返回false

 var str="abcdabcdabcd";
    console.log(method(str));
    function method(str){
        var strlen=str.length;
        var flag=0;
        var count=0;  //相等子串的个数
        for(var i=strlen;i>0;i--){   //子串长度
            if(strlen%i == 0){   //字符串按子串长度均匀划分
                var zinum=strlen/i;   //子串个数
                for(var k=0;k<i;k++){   //子串中的第几个字母
                    for(var j=1;j<zinum;j++){
                        if(str[k]==str[i*j+k]){
                            count++;
                        }
                    }
                }
                if(count == (j-1)*i && count!=0){
                    flag=1;
                    break;
                }
            }
        }
        if(flag==1){
            return true;
        }else{
            return false;
        }
    }

2.循环报数;n个人编号为1-n,从第一个人开始从1报数,每次报到k的人退出,退出的人的下一个人开始从1继续报数,依次循环,求最后退出的人的序号

function method(n,k) {
        var num=n;   //保存总人数
        var arr = [];
        for (var i = 0; i < n; i++) {
            arr[i] = true;
        }
        var index = 0;
        var count = 0;
        while (n > 1) {
            if (arr[index] == true) {  //为true参与报数
                count++;   //从1开始报数
                if (count == k) {
                    arr[index] = false;  //报到k的人退出,以后不参数报数
                    n--;
                    count=0;   //退出后从1开始重新报数
                }
            }
            index++;
            if (index == num) {   //最后一个人报数
                index = 0;    //继续从第一个人开始报数
            }
        }

        for (var j = 0; j < num; j++) {
            if (arr[j] == true) {
                return j+1;
            }
        }
    }

    console.log(method(10,3));
    
    
    //参考:https://blog.csdn.net/qq_41030039/article/details/90724619

3.颜色格式的转换;举例:输入 rgb(255,255,255),输出 #ffffff

    var s = 'rgb(255,255,255)';
    console.log(rgb2hex(s));
    function rgb2hex(sRGB) {
        var res="#";
        var reg=/^rgb \( (\d+) \s*, \s*(\d+)\s*, \s*(\d+) \)$/;
        if(reg.test(sRGB)==null){
            return sRGB;
        }else{
            var s = sRGB.split("(")[1].split(")")[0].split(",");
            for(var i=0;i<s.length;i++){
                res += method(s[i]);
            }
            return res;
        }

        function method(s){
            var r = parseInt(s);
            return r>16 ? r.toString(16) : '0'+ r.toString(16);
        }
    }

3、给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:
输入: "()"
输出: true

示例 2:
输入: "()[]{}"
输出: true

示例 3:
输入: "(]"
输出: false

示例 4:
输入: "([)]"
输出: false
    var str="[]({})";
    var res=(function(str){
        var arr=[];
        var result=[];
        if(str.length%2 != 0){ //括号成对出现,对2取余为0
            return false;
        }else{
            for(var i=0;i<str.length;i++){
                if(str[i]==="(" || str[i]==="{" || str[i]==="["){
                    arr.push(str[i]);   //左括号全部进栈
                }else{
                    var t=null;    //为左括号匹配的右括号
                    if(str[i]==")"){  
                        t="(";                          
                    }else if(str[i]=="}"){
                        t="{";
                    }else if(str[i]=="]"){
                        t="["
                    }
                    if(t!=arr.pop()){   //为左括号匹配的右括号与栈顶元素不相等
                       result.push(0);
                    }
                }
            }
        }

        if(result.indexOf(0)!=-1 && result!=[]){
            return false;
        }else{
            return true;
        }
    })(str);
    console.log(res);

4.生成一定范围内的随机数

 console.log(method(3,7));
    function method(min,max){
        var arr=[]
        for(var i=0;i<100;i++) {
            // arr.push(Math.floor(Math.random()*(max-min)+min));   //[min,max)
           arr.push(Math.floor(Math.random() * (max - min+1) + min));   //[min,max]
        }
        return arr;
    }

5. 二分查找

    function method(arr,key){
        var min=0;
        var max=arr.length-1;
        while(min<=max){
            var mid = parseInt((min+max)/2);
            if(arr[mid] == key){
                return mid;
            }else if(arr[mid] > key){
                max = mid-1;
            }else if(arr[mid] < key){
                min = mid+1;
            }
        }
        return -1;
    }
    console.log(method([2,5,8,13,24],13));

6.判断是否为黄金数:黄金数定义为一个数等于除1和本身之外的其他因子的乘机;
如:输入6=2*3 输出true

    function method(num){
        var mult=1;
        for(var i=2;i<num;i++){
            if(num%i == 0){
                mult*=i;
            }
        }
        if(mult == num){
            return true;
        }else{
            return false;
        }
    }
    console.log(method(8));

7.统计一个字符串中出现次数最多的字符及出现次数

function method(str){
        var obj={};
        for(var i=0;i<str.length;i++){
            if(!obj[str[i]]){
                obj[str[i]]=1;
            }else{
                obj[str[i]]+=1;
            }
        }
        var maxkey,maxnum= 0;
        for(var key in obj){
            if(obj[key]>maxnum){
                maxnum=obj[key];
                maxkey = key;
            }
        }
        return maxkey+","+maxnum;
    }
   console.log(method("aaakkkkkijnjbb"));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值