[JAVASCRIPT] Permutation 递归算法以及结果筛选

原创 2017年01月03日 14:51:30
function permAlone(str) {
				var arr = [];
				for(var index in str) {
					arr.push(str[index]);
				}
				//console.log(arr);
				var permutations = getPermutation(arr);
				for(var index in permutations) {
					var tamp = permutations[index].join("");
					permutations[index] = tamp;
				}
				permutations = getDifference(permutations);
				console.log(permutations);

				return permutations;

			}
			
			permAlone("aba");

			function getDifference(arr) {
                                 //去掉有连续两个项的
                                //console.log(/(.)\1/g.test("baa"));   // false

				var result = [];
				for(var i = 0; i < arr.length; i++) {
					if(!/(.)\1/g.test(arr[i])) {
						result.push(arr[i]);
					}
				}
				return result;
			}

			function getPermutation(arr) {

				if(arr.length == 1) {
					return [arr];
				}
				var permutation = [];
				for(var i = 0; i < arr.length; i++) {
					var firstEle = arr[i];
					var arrClone = arr.slice(0);
					arrClone.splice(i, 1);
					var childPermutation = getPermutation(arrClone);//递归 获得全排列 
					for(var j = 0; j < childPermutation.length; j++) {
						childPermutation[j].unshift(firstEle);
					}
					permutation = permutation.concat(childPermutation);
				}
				return permutation;

}

递归的原理是:比如 “123”的全排列,可以看作 1+[23,32];2+[13,31];3+[12,21]; 而“23”又可以看作 2+[3] ;3+[2];

所以递归的方式就是不断查找n-1 项的排列, 直到为1 ,返回其本身;

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

递归算法,JavaScript实现

我们先来看一下定义。递归算法,是将问题转化为规模缩小的同类问题的子问题,每一个子问题都用一个同样的算法去解决。一般来说,一个递归算法就是函数调用自身去解决它的子问题。   递归算法的特点: ...

递归算法的实现

  • 2013-11-19 23:27
  • 111KB
  • 下载

N后问题递归算法

  • 2013-12-25 21:55
  • 450KB
  • 下载

冒泡排序、直接选则排序、递归算法

一、冒泡排序 执行结果 二、直接选则排序 执行结果 三、递归算法 1. 一列数的规则如下: 1、1、2...

递归算法总结

下面总结一些常见的递归编程题: 1.使用递归逆序打印单链表: #define _CRT_SECURE_NO_WARNINGS 1 #includeusing namespace std;struct...

c语言汉诺塔的递归算法

  • 2012-12-25 14:57
  • 206KB
  • 下载

汉诺塔递归算法

  • 2012-11-09 23:26
  • 17KB
  • 下载

简单的递归算法和简单的printf函数模拟

简单的递归算法和简单的printf函数模拟!
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)