解决方案 »
- 怎么用html5实现用手机拍照上传的功能?
- setTimeout setInterval 在一个页面中如果有多个地方 速度会慢
- 在javascript中使用DOM解析问题
- 两个问题:1、如何用脚本实现样式表xxx:hover{};2、如何屏蔽IE8的“加速器”(activity)
- 帮帮改一下代码,小弟不会JS
- JavaScript极速狂飙:大容量字符型数组的快速检索_meizz
- 当我把checkbox 打上勾时,为什么上面的总押金和租金的值都没有改变!
- 100分请教高手,如何在表单中统计文本框的值
- 取数组下标的问题
- 如何判断几个select的选项不重复?
- 骨骼原理实现的柔体效果(javascript)
- Extjs4.1如何给tree的每个节点都加上复选框
假如一个串1234,对于长度位4的字串直接交给perm处理就可以了,小于它的则需要求出有多少种不重复的组合,所以现在需要求出长度为1,2,3的不重复组合:1,2,3,12,23,13,123,134,234。以此类推。然后就剩下通过递归去获取更中长度的串了。
所以大概逻辑是:递归出不同长度的子串->遍历得到当前子串的不重复的子串->将子串进行全排列
function combine(str){
var ss=str.split(' ');
var a=[],i,j,m,L=ss.length;
var re=[],_re,_L,k=0;
for(i=0;i<L;i++)a.push([i]);
re=re.concat(a);
while(k<L-1){
_re=[];
for(i=0,_L=a.length-1;i<_L;i++){
for(j=a[i][k]+1;j<L;j++){
var _a=a[i].concat(j );
_re.push( _a.slice(0));
for(m=0;m<_a.length-1;m++ ){
_a.push( _a.shift());
re.push( _a.concat());
}
}
}
a=_re.slice(0);
re=re.concat(a);
k++
}
console.info( re.length);
return re.join('<br/>').replace(/,/g,' ').replace(/\d+/mg,function(v){return ss[v]});
}document.write( combine('a b c d') );