那把重复的去掉
<script>
//ar数组
//rs组合的结果
//operate:
//0:-
//1:+
//2:*
//3:0
var numar=new Array(0,0,-1,-2,-3,-4,1,2,3,4,7,14);
function Generate_Permutations(ar,rs,operate)
{
var sum=new Array();
var flag="+";var tvar,tmp;
switch(operate)
{
case 0:flag="-";break;
case 1:flag="+";break;
case 2:flag="*";break;
case 3:flag="/";break;
default:{operate=1;flag="+";}
}
tvar = ar.join(",");tmp=tvar.replace(/,?0,?/g,"");;
tvar= tvar.length > tmp.length?tmp+",0":tmp;
ar=tvar.split(",");
if(!ar || ar.length<=1 )return sum;
ar.sort();
if((operate==0 && rs>=0)|| operate==3 )ar.reverse();
var result = new Array();
tvar = ar[ar.length-1] >=0 ? ar[ar.length-1]:"("+ar[ar.length-1]+")";
result.push(tvar);
for(var i=ar.length-2 ;i>=0;i--)
{
var count = result.length;
tvar = ar[i]>=0 ? ar[i]:"("+ar[i]+")";
for(var j=0;j<count;j++)
{
tmp=tvar+flag+result[j]
eval("var v="+tmp);
if(v==rs){(sum[tmp+"="+rs]++)||(sum[tmp+"="+rs]=1);}
result.push(tmp);
}
result.push(tvar);
}
return sum;
}
var ar=Generate_Permutations(numar,7,1);
for( x in ar)
document.write(x+"<br>");
</script>
<script>
//ar数组
//rs组合的结果
//flag加减乘除的+-*/
var numar=new Array(0,0,1,1,-1,1,2,3,4,5,7,0,-1);
function Generate_Permutations(ar,rs,flag)
{
var sum=new Array();
if(!ar || ar.length<=1 )return sum;
ar.sort();
var tvar;
var result = new Array();
tvar = ar[ar.length-1] >=0 ? ar[ar.length-1]:"("+ar[ar.length-1]+")";
result.push(tvar);
for(var i=ar.length-2 ;i>=0;i--)
{
var count = result.length;
tvar = ar[i]>=0 ? ar[i]:"("+ar[i]+")";
for(var j=0;j<count;j++)
{
var tmp=tvar+flag+result[j];
eval("var v="+tmp);
if(v==rs){(sum[tmp+"="+rs]++)||(sum[tmp+"="+rs]=1);}
result.push(tmp);
}
result.push(tvar);
}
return sum;
}
var ar=Generate_Permutations(numar,8,"+");
for( x in ar)
document.write(x+"<br>");
</script>