/*
题目描述
给定序列a: a1、a2、……、an
从左到右依次操作a[i],生成新序列:
a[1]直接放新序列,从第二个数开始若a[i] > a[i - 1], 放入当前新序列最右边,否则放入序列最左边,
得到新序列b: b1、b2、……、bn
现给定最终新序列,求原始序列有多少种可能?*/
//代码比较长,思路就是先把所有可能的结果找出,
然后一一测试是否可以组成新的序列,如果可以就计数//
/* 新序列排序规范*/
function aa(a){
"use strict";
var len=a.length;
var leftarr=[];
var rightarr=[];
if(a.length<=1){
return a;
}
for(var i=1;i<len;i++){
if(a[i]>a[i-1]){
rightarr.push(a[i]);
}
else{
leftarr.unshift(a[i]);
}
}
return [].concat(leftarr,a[0],rightarr);//拼接数组返回一个新数组
}
var a=[1,2,3,4,5,8];
/*排列组合一维数组(且不含有相同数字)*/
function onetoone(arr1,arr2){
"use strict";
var a1;
var a2;
var a3=[];
for(var i=0;i<arr1.length;i++){
a1=arr1[i];
for(var j=0;j<arr2.length;j++){
a2=arr2[j];
if(a1!==a2){
var n=a1+""+a2;
a3.push(n);
}
}
}
var a5=[];
//这里是为了将数组的数据类型一致
for(var m=0;m<a3.length;m++){
var a=a3[m].split('');
for(var l=0;l<a.length;l++){
a[l]=parseInt(a[l]);
}//字符串String
a5.push(a);//二维数组
}
return a5;
}
/*排列组合二维数组和一维数组(且相同数字只出现一次)/*/
function compose(arr1,arr2){
"use strict";
var a5=[];
for(var i=0;i<arr1.length;i++){
for(var j=0;j<arr2.length;j++){
if(arr1[i].indexOf(arr2[j])<0){
//连接为一个数组
a5.push(arr1[i].concat(arr2[j]));//二维数组
}
}
}
return a5;
}
var m=0;
var a4=onetoone(a,a);
var len=a.length-2;
while(m<len){
a4=compose(a4,a);
m++;
}
var count=0;
for(var i=0;i<a4.length;i++){
if((aa(a4[i])).toString()===a.toString()){
count++;
}
}
alert(count);
//最后,如果伙伴们有更好的方法请留言告诉我