位元組跳動2019校招前端筆試
阿新 • • 發佈:2019-02-14
/*
題目描述
給定序列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); //最後,如果夥伴們有更好的方法請留言告訴我