Skip to content

Commit

Permalink
Update 数组的排列组合.js
Browse files Browse the repository at this point in the history
  • Loading branch information
Rain120 authored Aug 21, 2018
1 parent b6b7b8e commit ef9e860
Showing 1 changed file with 41 additions and 18 deletions.
59 changes: 41 additions & 18 deletions 数组的排列组合.js
Original file line number Diff line number Diff line change
@@ -1,22 +1,45 @@
var arr = [1, 2, 3]
var _arr = []
function getArrange(arr, selectNum, selectedArr) {
if (selectNum === 1) {
for (var i = 0; i < arr.length; i++) {
var newSelectedArr = selectedArr.slice();
newSelectedArr.push(arr[i]);
_arr.push(newSelectedArr);
}
} else {
selectNum -= 1; //剩余选择的减一
for (var i = 0; i < arr.length; i++) {
var newSelectedArr = selectedArr.slice();
var newArr = arr.slice();
newSelectedArr.push(arr[i]);
newArr.splice(i, 1); //删除push进去的那一个
getArrange(newArr, selectNum, newSelectedArr);
// 全排列
function Permutations (target, size, origin) {
var _arr = []
function getArrange(target, nums, ret) {
if (nums === 1) {
for (var i = 0; i < target.length; i++) {
var tmp = ret.slice();
tmp.push(target[i]);
_arr.push(tmp);
}
} else {
nums -= 1;
for (var i = 0; i < target.length; i++) {
var tmp = ret.slice();
var newTarget = target.slice();
tmp.push(target[i]);
newTarget.splice(i, 1);
getArrange(newTarget, nums, tmp);
}
}
}
getArrange(target, size, origin);
return _arr;
}
getArrange(arr, 2, [])
Permutations([1, 2, 3], 2, [])

// 排列组合
function Permutations (arr, size) {
var ret = [];

function getRet(origin, target, size) {
if (size === 0) {
ret[ret.length] = origin;
return;
}
for (var i = 0; i <= target.length - size; i++) {
var tmp = origin.slice();
tmp.push(target[i]);
getRet(tmp, target.slice(i + 1), size - 1);
}
}
getRet([], arr, size);
return ret;
}
Permutations([1, 2, 3, 4], 3)

0 comments on commit ef9e860

Please sign in to comment.