let s = "2*3-4*5";
let mp = new Map();
let l = s.length;
function aa(l, r) {
let resArr = [];
let leftArr;
let rightArr;
for (let i = l; i < r - 2; i++) {
if (i - l === 0) {
leftArr = [s[i]];
} else {
const ts=l + String(i + 1)
if (mp.get(ts)) {
leftArr = mp.get(ts) ;
} else {
leftArr = aa(l, i + 1);
mp.set(ts, leftArr.slice())
}
}
if (i === r - 3) {
rightArr = [s[i + 2]];
} else {
const ts1=i + 2 + String(r)
if (mp.get(ts1)) {//使用mp记忆化搜索
rightArr = mp.get(ts1);
} else {
rightArr = aa(i + 2, r);
mp.set(ts1, rightArr.slice());
}
}
leftArr.forEach((e) => {
rightArr.forEach((e1) => {
if (s[i + 1] === "*") {
resArr.push(e * e1);
} else if (s[i + 1] === "+") {
resArr.push(e + e1);
} else if (s[i + 1] === "-") {
resArr.push(e - e1);
}
});
});
++i;
}
return resArr;
}
console.log(aa(0, l));
console.log(mp); // return temp
对算式设计运算优先级求得所有结果【分治】
于 2022-07-18 22:49:58 首次发布