前端基础笔记——添加运算符 dfs(额,不知道算不算,反正做出来了)

给出一个数字N,对于数字序列 1,2,3 ... N。现在在其中插入“+, "-", " ",使得表达式的和为M。" "的含义是把相邻的两个数字组成一个数。例如:1 + 2 3 - 4,含义是:1 + 23 - 4 = 20。
给出N和M,求出所有合法的序列的个数。
两个整数N,M ( 1 <= N <= 7, -100 <= M <= 100)
因为n<=7,所以复杂度较低,算出来就行了
* 核心思想就是先生成数组[1,2,3,4...]=>定义一个["+","-",""]的数组=>
* 设置一个函数,函数内部回调,注意,arr.length==1,2的时候不一样
* 每一个数的后接运算符都有三种可能,然后长度为7时,可能性数组数量应该是3^6
* 列出所有可能数组,然后通过eval方法去执行该段js代码,判断是否等于预定值
var line=readline().split(' ').map(Number)
var n=line[0]
var sum=line[1]
var arr=new Array(n+1).join('0').split('');
arr.map((item,i)=>{
    arr[i]=i+1
});
// 两层遍历
var num=0;
var label=['+','-',''];
function dfs(arr){
    var myarr=[];
    if(arr.length==1){
        return arr
    }
    if(arr.length==2){
        for(var j=0;j<3;j++){
            myarr.push(arr[0]+label[j]+arr[1])
        }
        return myarr;
    }
    // 否则
    for(var j=0;j<3;j++){
        var tem=dfs(arr.slice(1));
        for(var k=0;k<tem.length;k++){
            myarr.push(arr[0]+label[j]+tem[k])
        }
    }
    return myarr;
}
var myarr=dfs(arr)
// console.log(myarr)
for(var item in myarr){
    if(eval(myarr[item])==sum){
        num++;
    }
}
console.log(num)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值