一个填写框(1987)比如填写1987,也可以填写其他数字。得到结果是1789、1798、1879、1897、1978、1987
7189、7198、7819、7891、7918、79818179、8197、8719、8791、8917、8971
9178、9187、9718、9781、9817、987124组号码
7189、7198、7819、7891、7918、79818179、8197、8719、8791、8917、8971
9178、9187、9718、9781、9817、987124组号码
<script>
/*
* 全排列算法
*/
function getNumberLoop(str){
if(str.length<2){
return new Array(str);
}else if(str.length==2){
var newArray=new Array();
newArray[0]=str.charAt(0)+str.charAt(1);
newArray[1]=str.charAt(1)+str.charAt(0);
return newArray;
}else{
var Char=str.charAt(0);
var str=str.slice(1);
var arr=getNumberLoop(str);
var newArray=new Array();
for(var i=0;i<arr.length;i++){
for(var j=0;j<=arr[i].length;j++){
var sliceStr=arr[i];
sliceStr=sliceStr.slice(0,j)+Char+sliceStr.slice(j);
newArray[i*(arr[i].length+1)+j]=sliceStr;
}
}
return newArray;
}
}alert(getNumberLoop("AB"));//2条记录
alert(getNumberLoop("ABC"));//6条记录
alert(getNumberLoop("ABCD"));//24条记录
alert(getNumberLoop("ABCDE"));//120条记录
</script>
个数可以是任意个呀
/*
* 全排列算法
*/
function getNumberLoop(str){
if(str.length<2){
return new Array(str);
}else if(str.length==2){
var newArray=new Array();
newArray[0]=str.charAt(0)+str.charAt(1);
newArray[1]=str.charAt(1)+str.charAt(0);
return newArray;
}else{
var Char=str.charAt(0);
var str=str.slice(1);
var arr=getNumberLoop(str);
var newArray=new Array();
for(var i=0;i<arr.length;i++){
for(var j=0;j<=arr[i].length;j++){
var sliceStr=arr[i];
sliceStr=sliceStr.slice(0,j)+Char+sliceStr.slice(j);
newArray[i*(arr[i].length+1)+j]=sliceStr;
}
}
return newArray;
}
}/*
* 组合排列算法
*/
function Pmn(str,n,num){
if(str.length<n){
return null;
}else if(str.length==n){
return getNumberLoop(str);
}else{
var newArray=new Array();
var len = str.length-1;
len = Math.min(typeof(num)!='undefined'?num:len,len);
for(var i=len;i>=0;i--){
newArray = newArray.concat(Pmn(str.substr(0,i)+str.substr(i+1),n,i-1));
}
return newArray;
}
}alert(Pmn("ABCD",4).length);//24条记录
alert(Pmn("ABCDE",4).length);//120条记录
alert(Pmn("ABCDEF",4).length);//360条记录
alert(Pmn("ABCDEFG",4).length);//840条记录
</script>
alert(Pmn("ABC",4).length);用三位ABC的时候。出错了
alert(Pmn("ABCD",4).length);//24条记录
这条如果填写ABCC的话。会有重复的条目出现。应该是12条记录。这个怎么修改呢
function removeRepeat(arr){
var obj = new Object();
var newArray = new Array();
for(var i=0;i<arr.length;i++){
if(!eval("obj['"+arr[i]+"']")){
eval("obj['"+arr[i]+"']='"+arr[i]+"'");
}
}
for(var i in obj){
newArray[newArray.length]=obj[i];
}
return newArray;
}alert(removeRepeat(Pmn("AAAA",4)).length);//1条记录
alert(removeRepeat(Pmn("ABBB",4)).length);//4条记录
alert(removeRepeat(Pmn("AACC",4)).length);//6条记录
alert(removeRepeat(Pmn("ABCC",4)).length);//12条记录
var str = "1233";
var arr = new Array();
var obj = new Object();
for(var i=0;i<str.length;i++){
for(var j=i+1;j<str.length;j++){
var newStr = str.slice(0,i)+"#"+str.slice(i+1,j)+"#"+str.slice(j+1);
var newStr1 = newStr.split("").sort().join("");
if(!eval("obj['"+newStr1+"']")){
arr[arr.length] = newStr;
eval("obj['"+newStr1+"']='"+newStr1+"';");
}
}
}
alert(arr);
</script>
function getArray(str,num,index,obj){
if(str.length<num) return null;
var arr = new Array();
if(!obj) obj = new Object();
for(var i=(index||0);i<str.length;i++){
if(str.slice(i,i+1)=="#")continue;
var newStr = str.slice(0,i)+"#"+str.slice(i+1);
if(num>1){
arr = arr.concat(getArray(newStr,num-1,i+1,obj));
}else{
var newStr1 = newStr.split("").sort().join("");
if(!eval("obj['"+newStr1+"']")){
arr[arr.length] = newStr;
eval("obj['"+newStr1+"']='"+newStr1+"';");
}
}
}
return arr;
}alert(getArray("1234",1));//#234,1#34,12#4,123#
alert(getArray("1234",2));//##34,#2#4,#23#,1##4,1#3#,12##
alert(getArray("1233",1));//#233,1#33,12#3
alert(getArray("1233",2));//##33,#2#3,1##3,12##
</script>
alert(getArray("123",1));//123# 132#一共24个组才对。