【八月】每日一题 - 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]
}


相关文章
|
6月前
NYOJ-757-期末考试
NYOJ-757-期末考试
24 0
|
6月前
|
存储
每日一题啦(● ̄(エ) ̄●)(尼克切斯定理,等差数列)
每日一题啦(● ̄(エ) ̄●)(尼克切斯定理,等差数列)
30 0
1314:【例3.6】过河卒(Noip2002)
1314:【例3.6】过河卒(Noip2002)
143 0
|
算法
华为机试HJ76:尼科彻斯定理
华为机试HJ76:尼科彻斯定理
|
C++
【寒假每日一题】AcWing 4728. 乘方
目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
148 0
|
机器学习/深度学习 Java C++
【寒假每日一题】AcWing 4818. 奶牛大学(补)
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解
92 0
|
存储 人工智能 算法
【蓝桥杯集训·每日一题】AcWing 3305. 作物杂交
文章目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 Spfa算法
119 0
|
机器学习/深度学习 人工智能
【寒假每日一题】AcWing 4509. 归一化处理
目录 一、题目 1、原题链接 2、题目描述 二、解题报告 1、思路分析 2、时间复杂度 3、代码详解 三、知识风暴 1、cmath头文件相关函数 2、cout大法
116 0
蓝桥杯国赛 小数第n位(数论)
蓝桥杯国赛 小数第n位(数论)
蓝桥杯国赛 小数第n位(数论)
|
关系型数据库 MySQL 数据库
墨天轮每日三题
墨天轮每日三题
144 0