298 字
1 分钟
使用js来执行“置换”:给定N和k,列出所有置换
开始
使用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) 使用js来执行“置换”:给定N和k,列出所有置换
https://fuwari.vercel.app/posts/2022年/使用js来执行置换给定n和k列出所有置换/