美文网首页
算法篇-计算'+-'方程式

算法篇-计算'+-'方程式

作者: e80c3fbed5b2 | 来源:发表于2020-06-16 23:11 被阅读0次

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

如果方程没有解,请返回“No solution”。

如果方程有无限解,则返回“Infinite solutions”。

如果方程中只有一个解,要保证返回值 x 是一个整数。

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/solve-the-equation

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

/**
 * @param {string} equation
 * @return {string}
 */
var solveEquation = function(equation) {
    let left = equation.split('=')[0]
    let right = equation.split('=')[1]
    let reg = /-/g
    left = left.replace(reg, '+-')
    right = right.replace(reg, '+-')
    left = left.split('+')
    right = right.split('+')
    if (ifzeor(left) || ifzeor(right)) {
        if(ifzeor(right) && ifzeor(left)){
            return "Infinite solutions"
        } else {
            return right[0] == 0 || left[0] == 0 ? "Infinite solutions" : "No solution"
        }
    }
    let leftRes = rightRes = [];
    leftRes = countSum(0, 0, left)
    rightRes = countSum(0, 0, right)
    if (leftRes[0] - rightRes[0] === 0 && leftRes[1] - rightRes[1] === 0) {
        return 'Infinite solutions'
    } else if (leftRes[0] - rightRes[0] === 0) {
        return 'No solution'
    } else {
        return  'x=' + (rightRes[1] - leftRes[1]) / (leftRes[0] - rightRes[0])
    }
};
function countSum(leftRes, rightRes, dealArr) {
    !dealArr[0] ? dealArr.shift() : ''
    for(let i = 0; i < dealArr.length; i++) {
        if ((/-[1-9]\d*x/).test(dealArr[i]) || (/x/).test(dealArr[i])){
            let base = dealArr[i].replace('x', '')
            leftRes += base === '-' ? -1 : parseInt(base) || 1
        } else {
            rightRes += parseInt(dealArr[i])
        }
    }
    return [leftRes, rightRes];
}

function ifzeor(arr) {
    for(let i = 0; i < arr.length; i++) {
        if (arr[i] != '0x' && arr[i] != '-0x') {
            return false
        }
    }
    return true
}
我的小成果

相关文章

网友评论

      本文标题:算法篇-计算'+-'方程式

      本文链接:https://www.haomeiwen.com/subject/acidxktx.html