@@ -11,7 +11,7 @@ Tag : 「DFS」、「模拟」、「哈希表」
1111表达式语法如下所示:
1212
1313* 表达式可以为整数,` let ` 表达式,` add ` 表达式,` mult ` 表达式,或赋值的变量。表达式的结果总是一个整数。
14- * ( 整数可以是正整数、负整数、0ドル$)
14+ * 整数可以是正整数、负整数、0ドル$
1515* ` let ` 表达式采用 ` "(let v1 e1 v2 e2 ... vn en expr)" ` 的形式,其中 ` let ` 总是以字符串 ` "let" ` 来表示,接下来会跟随一对或多对交替的变量和表达式,也就是说,第一个变量 ` v1 ` 被分配为表达式 ` e1 ` 的值,第二个变量 ` v2 ` 被分配为表达式 ` e2 ` 的值,依次类推;最终 ` let ` 表达式的值为 ` expr ` 表达式的值。
1616* ` add ` 表达式表示为 ` "(add e1 e2)" ` ,其中 ` add ` 总是以字符串 ` "add" ` 来表示,该表达式总是包含两个表达式 ` e1 ` 、` e2 ` ,最终结果是 ` e1 ` 表达式的值与 ` e2 ` 表达式的值之 和 。
1717* ` mult ` 表达式表示为 ` "(mult e1 e2)" ` ,其中 ` mult ` 总是以字符串 ` "mult" ` 表示,该表达式总是包含两个表达式 ` e1 ` 、e2,最终结果是 ` e1 ` 表达式的值与 ` e2 ` 表达式的值之 积 。
@@ -20,12 +20,16 @@ Tag : 「DFS」、「模拟」、「哈希表」
2020
2121示例 1:
2222
23+ ```
2324输入:expression = "(let x 2 (mult x (let x 3 y 4 (add x y))))"
25+
2426输出:14
27+
2528解释:
2629计算表达式 (add x y), 在检查变量 x 值时,
2730在变量的上下文中由最内层作用域依次向外检查。
2831首先找到 x = 3, 所以此处的 x 值是 3 。
32+ ```
2933示例 2:
3034```
3135输入:expression = "(let x 3 x 2 x)"
@@ -57,7 +61,7 @@ Tag : 「DFS」、「模拟」、「哈希表」
5761
5862今天身体不舒服,不写太详细,题目不难,大家结合代码看吧。
5963
60- 设计函数 ` int dfs(int l, int r, Map<String, Integer> map) ` 函数 ,代表计算 $s[ l...r] $ 的结果,答案为 ` dfs(0,n-1,map) ` ,其中 $n$ 为字符串的长度。
64+ 设计函数 ` int dfs(int l, int r, Map<String, Integer> map) ` ,代表计算 $s[ l...r] $ 的结果,答案为 ` dfs(0,n-1,map) ` ,其中 $n$ 为字符串的长度。
6165
6266根据传入的 $[ l, r] $ 是否为表达式分情况讨论:
6367
@@ -96,7 +100,7 @@ class Solution {
96100 int idx = l;
97101 while (cs[idx] != ' ' ) idx++ ;
98102 String op = s. substring(l + 1 , idx);
99- r-- ;// 判别为 "(let"、"(add" 或 "(mult" 后,跳过对应的 ")"
103+ r-- ;
100104 if (op. equals(" let" )) {
101105 for (int i = idx + 1 ; i <= r; ) {
102106 int j = getRight(i, r);
@@ -109,14 +113,10 @@ class Solution {
109113 i = j + 1 ;
110114 }
111115 return - 1 ; // never
112- } else if (op. equals(" add" )) {
113- int j = getRight(idx + 1 , r);
114- int a = dfs(idx + 1 , j - 1 , new HashMap<> (map)), b = dfs(j + 1 , r, new HashMap<> (map));
115- return a + b;
116116 } else {
117117 int j = getRight(idx + 1 , r);
118118 int a = dfs(idx + 1 , j - 1 , new HashMap<> (map)), b = dfs(j + 1 , r, new HashMap<> (map));
119- return a * b;
119+ return op . equals( " add " ) ? a + b : a * b;
120120 }
121121 } else {
122122 String cur = s. substring(l, r + 1 );
@@ -156,4 +156,3 @@ class Solution {
156156为了方便各位同学能够电脑上进行调试和提交代码,我建立了相关的仓库:https://github.com/SharingSource/LogicStack-LeetCode 。
157157
158158在仓库地址里,你可以看到系列文章的题解链接、系列文章的相应代码、LeetCode 原题链接和其他优选题解。
159-
0 commit comments