<script type="text/javascript">
Array.prototype.strip=function(){
if(this.length<2) [this[0]]||[];
var arr=[];
for(var i=0;i<this.length;i++){
arr.push(this.splice(i--,1));
for(var j=0;j<this.length;j++){
if(this[j]==arr[arr.length-1]){
this.splice(j--,1); }}}
return arr;
}var string="apple"
var s_length=string.length;
var s_a=new Array(s_length);
s_a=string.split("",s_length)//字符串分割成数组
function randomsort() {
return Math.random()>.5 ? -1 : 1;//用Math.random()函数生成0~1之间的随机数与0.5比较,返回-1或1
}
/*字符串长度数的阶乘*/
var num=(function(){
var num_s_l=1;
for(var i=1;i<=s_length;i++){
num_s_l *= i;}
return num_s_l;})
var all_arr=new Array;for(var i=0;i<num();i++){ //想在()里加判断让最终的数组元素个数等于单词内字母的阶乘 不知道该怎么改!!
s_a.sort(randomsort);
var new_s=s_a.join("");
all_arr[i]=new_s;
}
document.write(all_arr.strip());
</script>现在能输入不重复的单词了,但是不完全 比如三个字母组成的单词若各字母都不同的话应该有6种排列而我的程序因为没有检测所以显示出的数目都是随机的。
那位大侠帮帮看该怎么修改!
你试试
document.write(all_arr.strip());
改成
document.write(all_arr);//这里面有结果等于你的阶乘的个数组合,但是已经有重复了,所以过滤掉了!
第一个开始跟其它两个组合!。。依此类推。
var n = this.length, m = m || n;
var x = function(i){return i > 0 ? arguments.callee(i - 1) * i : 1}(n);
var y = function(j){return j > 0 ? arguments.callee(j - 1) * j : 1}(n - m);
return x / y
}
String.prototype.Pushstr = function(m) {
var a = this.split(""), l = a.length;
var k = {}, r = [], m = m || this.length;
while (r.length < m) {
var q = a[l * Math.random() >> 0];
! k[q] && r.push(q) && (k[q] = !0);
}
var s = r.join("");
r.length = 0;
return s
}
String.prototype.Ranging = function(m) {
var K = {}, R = [], M = this.Arrrange(m);
while (R.length < M) {
var Q = this.Pushstr(m)
! K[Q] && R.push(Q) && (K[Q] = !0);
}
return R
}alert("abcd".Ranging());
alert("abcd".Ranging(3))
</script>