给出一个数字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)
前端基础笔记——添加运算符 dfs(额,不知道算不算,反正做出来了)
最新推荐文章于 2022-04-11 15:50:16 发布