mirror of
https://gitee.com/coder-xiaomo/leetcode-problemset
synced 2025-09-05 07:21:40 +08:00
update
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
"translatedContent": "<p>给你一个类似 Lisp 语句的字符串表达式 <code>expression</code>,求出其计算结果。</p>\n\n<p>表达式语法如下所示:</p>\n\n<ul>\n\t<li>表达式可以为整数,<strong>let</strong> 表达式,<strong>add</strong> 表达式,<strong>mult</strong> 表达式,或赋值的变量。表达式的结果总是一个整数。</li>\n\t<li>(整数可以是正整数、负整数、0)</li>\n\t<li><strong>let</strong> 表达式采用 <code>\"(let v<sub>1</sub> e<sub>1</sub> v<sub>2</sub> e<sub>2</sub> ... v<sub>n</sub> e<sub>n</sub> expr)\"</code> 的形式,其中 <code>let</code> 总是以字符串 <code>\"let\"</code>来表示,接下来会跟随一对或多对交替的变量和表达式,也就是说,第一个变量 <code>v<sub>1</sub></code>被分配为表达式 <code>e<sub>1</sub></code> 的值,第二个变量 <code>v<sub>2</sub></code> 被分配为表达式 <code>e<sub>2</sub></code> 的值,<strong>依次类推</strong>;最终 <code>let</code> 表达式的值为 <code>expr</code>表达式的值。</li>\n\t<li><strong>add </strong>表达式表示为 <code>\"(add e<sub>1</sub> e<sub>2</sub>)\"</code> ,其中 <code>add</code> 总是以字符串 <code>\"add\"</code> 来表示,该表达式总是包含两个表达式 <code>e<sub>1</sub></code>、<code>e<sub>2</sub></code> ,最终结果是 <code>e<sub>1</sub></code> 表达式的值与 <code>e<sub>2</sub></code> 表达式的值之 <strong>和 </strong>。</li>\n\t<li><strong>mult</strong> 表达式表示为 <code>\"(mult e<sub>1</sub> e<sub>2</sub>)\"</code> ,其中 <code>mult</code> 总是以字符串 <code>\"mult\"</code> 表示,该表达式总是包含两个表达式 <code>e<sub>1</sub></code>、<code>e<sub>2</sub></code>,最终结果是 <code>e<sub>1</sub></code> 表达式的值与 <code>e<sub>2</sub></code> 表达式的值之<strong> 积 </strong>。</li>\n\t<li>在该题目中,变量名以小写字符开始,之后跟随 0 个或多个小写字符或数字。为了方便,<code>\"add\"</code> ,<code>\"let\"</code> ,<code>\"mult\"</code> 会被定义为 \"关键字\" ,不会用作变量名。</li>\n\t<li>最后,要说一下作用域的概念。计算变量名所对应的表达式时,在计算上下文中,首先检查最内层作用域(按括号计),然后按顺序依次检查外部作用域。测试用例中每一个表达式都是合法的。有关作用域的更多详细信息,请参阅示例。</li>\n</ul>\n \n\n<p><strong>示例 1:</strong></p>\n\n<pre>\n<strong>输入:</strong>expression = \"(let x 2 (mult x (let x 3 y 4 (add x y))))\"\n<strong>输出:</strong>14\n<strong>解释:</strong>\n计算表达式 (add x y), 在检查变量 x 值时,\n在变量的上下文中由最内层作用域依次向外检查。\n首先找到 x = 3, 所以此处的 x 值是 3 。\n</pre>\n\n<p><strong>示例 2:</strong></p>\n\n<pre>\n<strong>输入:</strong>expression = \"(let x 3 x 2 x)\"\n<strong>输出:</strong>2\n<strong>解释:</strong>let 语句中的赋值运算按顺序处理即可。\n</pre>\n\n<p><strong>示例 3:</strong></p>\n\n<pre>\n<strong>输入:</strong>expression = \"(let x 1 y 2 x (add x y) (add x y))\"\n<strong>输出:</strong>5\n<strong>解释:</strong>\n第一个 (add x y) 计算结果是 3,并且将此值赋给了 x 。 \n第二个 (add x y) 计算结果是 3 + 2 = 5 。\n</pre>\n \n\n<p><strong>提示:</strong></p>\n\n<ul>\n\t<li><code>1 <= expression.length <= 2000</code></li>\n\t<li><code>exprssion</code> 中不含前导和尾随空格</li>\n\t<li><code>expressoin</code> 中的不同部分(token)之间用单个空格进行分隔</li>\n\t<li>答案和所有中间计算结果都符合 <strong>32-bit</strong> 整数范围</li>\n\t<li>测试用例中的表达式均为合法的且最终结果为整数</li>\n</ul>\n",
|
||||
"isPaidOnly": false,
|
||||
"difficulty": "Hard",
|
||||
"likes": 77,
|
||||
"likes": 78,
|
||||
"dislikes": 0,
|
||||
"isLiked": null,
|
||||
"similarQuestions": "[{\"title\": \"Ternary Expression Parser\", \"titleSlug\": \"ternary-expression-parser\", \"difficulty\": \"Medium\", \"translatedTitle\": \"\\u4e09\\u5143\\u8868\\u8fbe\\u5f0f\\u89e3\\u6790\\u5668\"}, {\"title\": \"Number of Atoms\", \"titleSlug\": \"number-of-atoms\", \"difficulty\": \"Hard\", \"translatedTitle\": \"\\u539f\\u5b50\\u7684\\u6570\\u91cf\"}, {\"title\": \"Basic Calculator IV\", \"titleSlug\": \"basic-calculator-iv\", \"difficulty\": \"Hard\", \"translatedTitle\": \"\\u57fa\\u672c\\u8ba1\\u7b97\\u5668 IV\"}]",
|
||||
@@ -155,7 +155,7 @@
|
||||
"__typename": "CodeSnippetNode"
|
||||
}
|
||||
],
|
||||
"stats": "{\"totalAccepted\": \"1.8K\", \"totalSubmission\": \"3.7K\", \"totalAcceptedRaw\": 1759, \"totalSubmissionRaw\": 3706, \"acRate\": \"47.5%\"}",
|
||||
"stats": "{\"totalAccepted\": \"1.8K\", \"totalSubmission\": \"3.8K\", \"totalAcceptedRaw\": 1811, \"totalSubmissionRaw\": 3824, \"acRate\": \"47.4%\"}",
|
||||
"hints": [
|
||||
"* If the expression starts with a digit or '-', it's an integer: return it.\r\n\r\n* If the expression starts with a letter, it's a variable. Recall it by checking the current scope in reverse order.\r\n\r\n* Otherwise, group the tokens (variables or expressions) within this expression by counting the \"balance\" `bal` of the occurrences of `'('` minus the number of occurrences of `')'`. When the balance is zero, we have ended a token. For example, `(add 1 (add 2 3))` should have tokens `'1'` and `'(add 2 3)'`.\r\n\r\n* For add and mult expressions, evaluate each token and return the addition or multiplication of them.\r\n\r\n* For let expressions, evaluate each expression sequentially and assign it to the variable in the current scope, then return the evaluation of the final expression."
|
||||
],
|
||||
|
Reference in New Issue
Block a user