利用javascript 进行单词组合

Cool_xiaocao 2013-08-02 11:13:55
要求是输入几个单词(输入的数量不定,可能输入5个,也可能输入10,空格分隔开),对这些输入的单词进行组合与拆分。
例如:I Like CSDN
单词组合与拆分如下:
I
Like
CSDN
I Like
I CSDN
I Like CSDN
I CSDN Like
Like CSDN
Like I
CSDN Like
CSDN I
CSDN I Like
CSDN Like I
...全文
257 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
奇乐二二二 2013-08-03
  • 打赏
  • 举报
回复
按空格拆分成数组应该不用说啦,然后就是全排列了,不过你的全排列长度不是固定的,单个的或者没到最大长度的排列都算,所以有必要先看一下全排列, 这里。现在perm函数可以对任意长度的串进行全排,所以现在只要求出所有的不重复的组合类型再交给perm处理就可以了。 假如一个串1234,对于长度位4的字串直接交给perm处理就可以了,小于它的则需要求出有多少种不重复的组合,所以现在需要求出长度为1,2,3的不重复组合:1,2,3,12,23,13,123,134,234。以此类推。然后就剩下通过递归去获取更中长度的串了。 所以大概逻辑是:递归出不同长度的子串->遍历得到当前子串的不重复的子串->将子串进行全排列
Cool_xiaocao 2013-08-03
  • 打赏
  • 举报
回复
兄弟,非常感谢了
fzfei2 2013-08-03
  • 打赏
  • 举报
回复

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') );

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧