LeetCode 每日 1 题:执行操作后的变量值

76 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第 24 天,点击查看活动详情

执行操作后的变量值

原题地址

存在一种仅支持 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. 按照题目中的对运算的定义挨个计算;
  2. 遍历 operations,遇到 ++X 和 X++ 时,给 result 进行加一的操作,遇到 --X 和 X-- 时,给 result 进行减一的操作;
  3. 最后返回 result 即可。

方法二

  1. 定义一个 map,来存储题目中的运算和加减的关系;
  2. 遍历 operations,使用 eval 来执行构成的字符串运算;
  3. 遍历完成后,返回 result 即可。

AC 代码

/**
 * @param {string[]} operations
 * @return {number}
 */
var finalValueAfterOperations = function(operations) {
    let result = 0
    for(let i = 0; i < operations.length; i++) {
        if(operations[i] === '++X' || operations[i] === 'X++') {
            result += 1
        } else if(operations[i] === '--X' || operations[i] === 'X--') {
            result -= 1
        }
    }
    return result
};

结果:

  • 执行结果: 通过
  • 执行用时:72 ms, 在所有 JavaScript 提交中击败了24.55%的用户
  • 内存消耗:41.4 MB, 在所有 JavaScript 提交中击败了55.69%的用户
  • 通过测试用例:259 / 259

方法二

/**
 * @param {string[]} operations
 * @return {number}
 */
var finalValueAfterOperations = function(operations) {
    const map = {
        '++X': '+',
        'X++': '+',
        '--X': '-',
        'X--': '-'
    }
    let result = 0
    for(let i = 0; i < operations.length; i++) {
        result = eval(`${result}${map[operations[i]]}1`)
    }
    return result
};

结果:

  • 执行结果: 通过
  • 执行用时:76 ms, 在所有 JavaScript 提交中击败了13.17%的用户
  • 内存消耗:43.7 MB, 在所有 JavaScript 提交中击败了5.39%的用户
  • 通过测试用例:259 / 259

END