【八月】每日一题 - 640. 求解方程

简介: 【八月】每日一题 - 640. 求解方程

问题详情

求解一个给定的方程,将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' 。

链接:leetcode.cn/problems/so…

解题思路

很经典的一个方程题,核心思路都是统计x的数量以及剩余数字的合。 试想一下,我们讲所有x移到左边,数字和移动到右边,方程求解就是一个除法。

那就统计=左边的x数量,减去右边的x数量。然后将右边的算数合减去左边的算数合即可。

  • 方程就被我们化解成这样x + 2 = 2x - 1 ---> -x = -3
  • 需要注意一点如60x + ..,我们需要缓存数字,遇到符号+ - x之中任意一个就将数字“用掉”,并且重制,直接使用字符串岂可。('6' + '0' = '60'

AC代码

var solveEquation = function(equation) {
    let equaIndex = equation.indexOf('=')
    let [leftNum,leftXNum] = getNum(0,equaIndex - 1,equation)
    let [rightNum,rightXNum] = getNum(equaIndex + 1,equation.length - 1,equation)
    let num = leftNum - rightNum
    let xNum = rightXNum - leftXNum
    if(xNum === 0 && num !== 0){
        return 'No solution'
    }
    return xNum === 0 ? 'Infinite solutions' : ('x=' + num / xNum)
};
function getNum(start,end,str){
    let sum = 0, xNum = 0
    let temp = ''
    for(let i = start; i <= end; i++){
        if(str[i] === 'x'){
            if(temp !=='' && temp !== '+' && temp !== '-'){
                xNum += Number(temp)
            }else{
                xNum += Number(temp + 1)
            }
            temp = ''
        }else if(str[i] === '+' || str[i] === '-'){
            sum += Number(temp)
            temp = str[i]
        }else{
            temp += str[i]
        }
    }
    sum += Number(temp) // 需要注意的是如果最后一个为数字的话,会被我们缓存,而没有进行计算
    return [sum,xNum]
}


相关文章
|
2月前
|
C++
【PTA】​L1-079 天梯赛的善良​ (C++)
【PTA】​L1-079 天梯赛的善良​ (C++)
66 0
【PTA】​L1-079 天梯赛的善良​ (C++)
|
6月前
|
算法
华为机试HJ76:尼科彻斯定理
华为机试HJ76:尼科彻斯定理
|
6月前
华为机试HJ72:百钱买百鸡问题
华为机试HJ72:百钱买百鸡问题
|
9月前
|
测试技术 C++
【PTA天梯赛】L1-001 L1-002 L1-003 L-004 L-005 L-006 L-007 L-008 L-009 L1-010 c++
【PTA天梯赛】L1-001 L1-002 L1-003 L-004 L-005 L-006 L-007 L-008 L-009 L1-010 c++
170 1
|
9月前
|
C++
【PTA天梯赛】L1-011 —— L1-020 c++ 题解
【PTA天梯赛】L1-011 —— L1-020 c++ 题解
247 0
|
10月前
|
测试技术
蓝桥杯2021年第十二届省赛真题-砝码称重(动态规划)
蓝桥杯2021年第十二届省赛真题-砝码称重(动态规划)
|
C++
【蓝桥杯基础题】2017年省赛—九宫幻方
【蓝桥杯基础题】2017年省赛—九宫幻方
129 0
【蓝桥杯基础题】2017年省赛—九宫幻方
|
关系型数据库 MySQL 数据库
墨天轮每日三题
墨天轮每日三题
117 0
|
定位技术 容器
PTA天梯训练赛一&二
PTA天梯训练赛一&二
87 0