Skip to content

Commit 86c24cd

Browse files
committed
https://leetcode.cn/problems/boolean-evaluation-lcci/
1 parent 73d8488 commit 86c24cd

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ leetcode 测试
1010

1111
##### 包含的内容如下
1212

13+
https://leetcode.cn/problems/boolean-evaluation-lcci/
14+
1315
https://leetcode.cn/problems/build-an-array-with-stack-operations/
1416

1517
https://leetcode.cn/problems/using-a-robot-to-print-the-lexicographically-smallest-string/

boolean-evaluation-lcci/index.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
function countEval(s: string, result: number): number {
2+
const n = s.length;
3+
// 创建三维数组
4+
const dp: number[][][] = new Array(n)
5+
.fill(0)
6+
.map(() => new Array(n).fill(0).map(() => new Array(2).fill(0)));
7+
// 初始化basecase s[i] 为 1,则 dp[i][i][1] = 1, dp[i][i][0] = 0
8+
for (let i = 0; i < n; i += 2) {
9+
let tmp = 0;
10+
if (s[i] == "1") tmp = 1;
11+
dp[i][i][0] = 1 - tmp;
12+
dp[i][i][1] = tmp;
13+
}
14+
15+
// 从0开始,每次+2
16+
for (let step = 0; step < n; step += 2) {
17+
// 计算 i - (i+step) 的情况, j 为中间间隔点 s[j] 为符号
18+
for (let i = 0; i + step < n; i += 2) {
19+
for (let j = i + 1; j < i + step; j += 2) {
20+
const left0 = dp[i][j - 1][0],
21+
left1 = dp[i][j - 1][1];
22+
const right0 = dp[j + 1][i + step][0],
23+
right1 = dp[j + 1][i + step][1];
24+
if (s[j] == "&") {
25+
dp[i][i + step][0] += left0 * (right0 + right1) +
26+
left1 * right0;
27+
dp[i][i + step][1] += left1 * right1;
28+
} else if (s[j] == "|") {
29+
dp[i][i + step][0] += left0 * right0;
30+
dp[i][i + step][1] += left0 * right1 +
31+
left1 * (right0 + right1);
32+
} else {
33+
//s[j]=='^'
34+
dp[i][i + step][0] += left0 * right0 + left1 * right1;
35+
dp[i][i + step][1] += left0 * right1 + left1 * right0;
36+
}
37+
}
38+
}
39+
}
40+
return dp[0][n - 1][result];
41+
}
42+
export default countEval;

0 commit comments

Comments
 (0)