求解一个给定的方程,将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
}
我的小成果












网友评论