java 穷举 排列组合,JavaScript递归穷举所有排列组合并找出重复值
export default {
data() {
return {
resultArr:[]
}
},
mounted(){
this.sss('aaba','abac');
this.sss('a9310990','133990b');
this.sss('vue','fusev');
this.sss('ab3dc','cae3fd');
},
methods:{
sss(s1,s2){
// 列出s1和s2的所有排列組合
let arr1 = this.recursion(s1);
let arr2 = this.recursion(s2);
let resultArr = [];
// for循環(huán)遍歷出重復(fù)值
for (let index = 0; index < arr1.length; index++) {
for (let j = 0; j < arr2.length; j++) {
if (arr1[index] == arr2[j]){
resultArr.push(arr2[j])
}
}
}
// 處理后返回最終結(jié)果
resultArr = resultArr.length == 1 ? resultArr.join('') : resultArr
let data = typeof resultArr == "string" ? resultArr : [...new Set(resultArr)];
console.log(s1,s2,' => ', data)
},
// 遍歷str的長度,每個字符都進(jìn)行遞歸窮舉出所有排列組合
recursion(val){
// 兩個str都要用到這個數(shù)組,所以每次進(jìn)來都清空
this.resultArr = [];
let valList = val.split('');
let data = [];
for (let index = 0; index < valList.length; index++) {
const element = valList[index];
let tempList = JSON.parse(JSON.stringify(valList))
tempList.splice(0,index+1);
data = this.recursionFn(element,tempList,1);
}
return this.resultArr;
},
recursionFn(val,list,number) {
this.recursionFnFn(val,list,number).then(() => {
if(list.length !== 0) {
// 每次調(diào)用數(shù)組的第一個,并刪除數(shù)組的第一個再進(jìn)行下次遞歸,直到數(shù)組為空,就得到結(jié)果
++ number;
let tempList = JSON.parse(JSON.stringify(list))
tempList.splice(0,1);
this.recursionFn(list[0],JSON.parse(JSON.stringify(tempList)),number);
} else {
// 窮舉了所有排列組合,去重
this.resultArr = [...new Set(this.resultArr)];
return this.resultArr;
}
});
},
recursionFnFn(val,list,number){
return new Promise((resolve,reject) => {
for (let index = 0; index < list.length; index++) {
// 將每次值過來的val初始值,再遍歷+數(shù)組所有的值,來形成排列組合
let element = list[index];
let temp = val+element;
this.resultArr.push(temp);
if(list.length !== 0) {
// 如果數(shù)組不為空,就遞歸調(diào)用自己繼續(xù)排列組合
let newCom = new Promise((resolve,reject) => {
// 和上個函數(shù)調(diào)用它一樣(每次調(diào)用數(shù)組的第一個,并刪除數(shù)組的第一個再進(jìn)行下次遞歸,直到數(shù)組為空,就得到結(jié)果)
++number;
let tempList = JSON.parse(JSON.stringify(list))
tempList.splice(0,index+1);
this.recursionFnFn(temp,JSON.parse(JSON.stringify(tempList)),number);
resolve();
});
newCom.then(()=>{
});
}
}
resolve()
})
},
}
}
總結(jié)
以上是生活随笔為你收集整理的java 穷举 排列组合,JavaScript递归穷举所有排列组合并找出重复值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 左手写爱下一句是什么啊?
- 下一篇: php表单偶数变颜色,利用CSS3 nt