跳到主要内容

使用js来执行“置换”:给定N和k,列出所有置换

2 分钟阅读

开始

使用js来执行“置换”:给定N和k,列出所有置换
-例如,N=4,k=3:123124132134142143213214,。。。432(其中有24个)

var replacement = (N, k) => {
let result = [];
if (N < 0) {
console.log('N值不能为负数')
} else if (k < 1) {
console.log('k值不能为0和负数')
} else if (k > N) {
console.log('k值不能大于置换长度')
} else {
//将N值转化为数组
let data = []
for (let i = 1; i <= N; i++) {
data.push(i)
}
//构建多叉树树干
getBranch(data).map((p) => {
//开始遍历
dataToTree(getBranch(p.data), 0, [p.index]);
})
}
//获取当前分支下可置换数组
function getBranch(arr) {
let data = []
for (let i = 0; i < arr.length; i++) {
let data_copy = JSON.parse(JSON.stringify(arr));
let index = data_copy.splice(i, 1)
data.push({
index: index[0],
data: data_copy
})
}
return data;
}
//多叉树
function dataToTree(d, t, e) {
//d为数据,t为次数,e为遍历继承的数据
//多叉树构建深度
if (t < k - 1) {
d.map((p) => {
if (p.data.length >= 1) { //如果还有分支就再次遍历
let e2 = JSON.parse(JSON.stringify(e));
let t2 = t + 1;
e2.push(p.index)
dataToTree(getBranch(p.data), t2, e2)
} else { //没有了就将结果放入result数组
let e2 = JSON.parse(JSON.stringify(e));
e2.push(p.index)
result.push(e2);
}
});
} else {
result.push(e);
}
}
return result;
}
//示例
var replaceResult = replacement(4, 3)
console.log(replaceResult)
评论
0条评论

添加新评论

昵称
邮箱
网址