跳至主要內容

2011. 执行操作后的变量值


2011. 执行操作后的变量值

🟢   🔖  数组 字符串 模拟  🔗 力扣open in new window LeetCodeopen in new window

题目

There is a programming language with only four operations and one variable X:

  • ++X and X++ increments the value of the variable X by 1.
  • --X and X-- decrements the value of the variable X by 1.

Initially, the value of X is 0.

Given an array of strings operations containing a list of operations, return _thefinal value of _X after performing all the operations.

Example 1:

Input: operations = ["--X","X++","X++"]

Output: 1

Explanation: The operations are performed as follows:

Initially, X = 0.

--X: X is decremented by 1, X = 0 - 1 = -1.

X++: X is incremented by 1, X = -1 + 1 = 0.

X++: X is incremented by 1, X = 0 + 1 = 1.

Example 2:

Input: operations = ["++X","++X","X++"]

Output: 3

Explanation: The operations are performed as follows:

Initially, X = 0.

++X: X is incremented by 1, X = 0 + 1 = 1.

++X: X is incremented by 1, X = 1 + 1 = 2.

X++: X is incremented by 1, X = 2 + 1 = 3.

Example 3:

Input: operations = ["X++","++X","--X","X--"]

Output: 0

Explanation: The operations are performed as follows:

Initially, X = 0.

X++: X is incremented by 1, X = 0 + 1 = 1.

++X: X is incremented by 1, X = 1 + 1 = 2.

--X: X is decremented by 1, X = 2 - 1 = 1.

X--: X is decremented by 1, X = 1 - 1 = 0.

Constraints:

  • 1 <= operations.length <= 100
  • operations[i] will be either "++X", "X++", "--X", or "X--".

题目大意

存在一种仅支持 4 种操作和 1 个变量 X 的编程语言:

  • ++XX++ 使变量 X 的值 1
  • --XX-- 使变量 X 的值 1

最初,X 的值是 0

给你一个字符串数组 operations ,这是由操作组成的一个列表,返回执行所有操作后, X最终值

示例 1:

输入: operations = ["--X","X++","X++"]

输出: 1

解释: 操作按下述步骤执行:

最初,X = 0

--X:X 减 1 ,X = 0 - 1 = -1

X++:X 加 1 ,X = -1 + 1 = 0

X++:X 加 1 ,X = 0 + 1 = 1

示例 2:

输入: operations = ["++X","++X","X++"]

输出: 3

解释: 操作按下述步骤执行:

最初,X = 0

++X:X 加 1 ,X = 0 + 1 = 1

++X:X 加 1 ,X = 1 + 1 = 2

X++:X 加 1 ,X = 2 + 1 = 3

示例 3:

输入: operations = ["X++","++X","--X","X--"]

输出: 0

解释: 操作按下述步骤执行:

最初,X = 0

X++:X 加 1 ,X = 0 + 1 = 1

++X:X 加 1 ,X = 1 + 1 = 2

--X:X 减 1 ,X = 2 - 1 = 1

X--:X 减 1 ,X = 1 - 1 = 0

提示:

  • 1 <= operations.length <= 100
  • operations[i] 将会是 "++X""X++""--X""X--"

解题思路

  1. 初始化变量 x = 0

  2. 遍历 operations 数组,检查每个字符串的中心字符。

    • 操作 "++X""X++" 的中心字符是 '+'(ASCII 值 43),表示增加 1。
    • 操作 "--X""X--" 的中心字符是 '-'(ASCII 值 45),表示减少 1。
  3. 通过 charCodeAt(1) 提取中心字符的 ASCII 值,再通过44 - str.charCodeAt(1) 计算操作的数值:

    • 如果中心字符为 '+'44 - 43 = 1
    • 如果中心字符为 '-'44 - 45 = -1
  4. 累加所有的变化到 x,返回结果。

复杂度分析

  • 时间复杂度O(n),其中 noperations 的长度,遍历数组一次。
  • 空间复杂度O(1),使用常数额外空间变量。

代码

/**
 * @param {string[]} operations
 * @return {number}
 */
var finalValueAfterOperations = function (operations) {
	let x = 0;
	operations.forEach((str) => (x += 44 - str.charCodeAt(1)));
	return x;
};