求解方程

103 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情

640. 求解方程 - 力扣(LeetCode)

求解一个给定的方程,将x以字符串 "x=#value" 的形式返回。该方程仅包含 '+''-' 操作,变量 x 和其对应系数。

如果方程没有解,请返回 "No solution" 。如果方程有无限解,则返回 “Infinite solutions”

题目保证,如果方程中只有一个解,则 'x' 的值是一个整数。

示例 1:

输入: equation = "x+5-3+x=6+x-2"
输出: "x=2"

示例 2:

输入: equation = "x=x"
输出: "Infinite solutions"

示例 3:

输入: equation = "2x=x"
输出: "x=0"

提示:

  • 3 <= equation.length <= 1000
  • equation 只有一个 '='.
  • equation 方程由整数组成,其绝对值在 [0, 100] 范围内,不含前导零和变量 'x' 。 

解题

/**
 * @param {string} equation
 * @return {string}
 */
var solveEquation = function (equation) {
  equation += "+";
  let factor = 0;
  let value = 0;
  let flag = 1;
  let sign = 1;
  for (let i = 0, j = 0; i < equation.length; i++) {
    const char = equation[i];
    if (!/\d/.test(char)) {
      if (char === "x") {
        factor += +(i > j ? equation.slice(j, i) : 1) * sign;
      } else {
        if (i > j) {
          value += +equation.slice(j, i) * sign;
        }
        if(char==='='){
          flag = -1
        }
        sign = (char === "-" ? -1 : 1) * flag;
      }
      j = i + 1;
    }
  }

  if (factor === 0) {
    return value === 0 ? "Infinite solutions" : "No solution";
  } else {
    return `x=${-value / factor}`;
  }
};