一个填写框(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组号码

解决方案 »

  1.   

    全排列算法,参考http://blog.csdn.net/lihui_shine/archive/2007/08/23/1755982.aspx
      

  2.   

    不明白你的意思了
    <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>
    个数可以是任意个呀
      

  3.   

    比如你要填写ABCDE,那么得到也是120记录。。但是每条只4个字母。你现在的是现实5个字母了
      

  4.   

    <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>
      

  5.   

    lihui_shine大哥
    alert(Pmn("ABC",4).length);用三位ABC的时候。出错了
      

  6.   

    lihui_shine大哥 
    alert(Pmn("ABCD",4).length);//24条记录
    这条如果填写ABCC的话。会有重复的条目出现。应该是12条记录。这个怎么修改呢
      

  7.   

    再加一个过滤重复的好了
    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条记录
      

  8.   

    <script>
    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>
      

  9.   

    <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>
      

  10.   

    如果这样就倒不出来了
    alert(getArray("123",1));//123# 132#一共24个组才对。