640 求解方程 (中等)

简介:

image-20221030203242964

解题思路:遍历字符串,对于不同的字符执行不同的操作,模拟操作

#
# @lc app=leetcode.cn id=640 lang=python3
#
# [640] 求解方程
#

# @lc code=start
from curses.ascii import isdigit


class Solution:
    def solveEquation(self, equation: str) -> str:
        factor = val = 0
        i, n, sign = 0, len(equation), 1  # 等式左边默认系数为正
        while i < n:
            if equation[i] == '=':
                sign = -1
                i += 1
                continue
            s = sign
            if equation[i] == '+':
                i += 1
            elif equation[i] == '-':
                s = -s
                i += 1
            num, valid = 0, False
            while i < n and equation[i].isdigit():
                valid = True
                num = num*10+int(equation[i])
                i += 1
            if i < n and equation[i] == 'x':  # 变量
                factor += s*num if valid else s
                i += 1
            else:  # 数值
                val += s*num
        if factor == 0:
            return "No solution" if val else "Infinite solutions"
        return f"x={-val//factor}"


# @lc code=end
class Solution {
public:
    string solveEquation(string equation) {
        int factor=0,val=0;
        int index=0,n=equation.size(),sign=1;//等式左边系数为正
        while(index<n){
            if (equation[index]=='='){
                index+=1;
                sign=-1;//等式右边系数为负
                continue;
            }
            int s=sign,number=0;
            bool valid=false; //记录num是否有效
            if(equation[index]=='-'||equation[index]=='+'){
                s=(equation[index]=='-')? -sign:sign;
                index++;
            }
            while(index<n&&isdigit(equation[index])){
                number=number*10+(equation[index]-'0');
                index++;
                valid=true;
            }
            if(index<n&&equation[index]=='x'){
                factor+=valid? s*number:s;
                index++;
            }
            else{
                val+=s*number;
            }
        }
            if (factor==0){
                return val==0? "Infinite solutions":"No solution";
            }
            return string("x=")+to_string(-val/factor);
    }
};
相关文章
|
5月前
|
算法 测试技术 C++
【状态压缩 容斥原理 组合数学】3116. 单面值组合的第 K 小金额
【状态压缩 容斥原理 组合数学】3116. 单面值组合的第 K 小金额
【状态压缩 容斥原理 组合数学】3116. 单面值组合的第 K 小金额
|
5月前
|
算法 测试技术 C#
【状态压缩 动态规划 数论】1799. N 次操作后的最大分数和
【状态压缩 动态规划 数论】1799. N 次操作后的最大分数和
|
人工智能 算法
算法提高:组合数学| 容斥原理常见应用
容斥原理常见的问题如下。 (1) 篮球、羽毛球、网球三种运动,至少会一种的有22人,会篮球的有15人,会羽毛球的有17人,会网球的有12人,既会篮球又会羽毛球的有11人,既会羽毛球又会网球的有7人,既会篮球又会网球的有9人,那么三种运动都会的有多少人? (2) 《西游记》《三国演义》《红楼梦》三大名著,至少读过其中一本的有20人,读过《西游记》的有10人,读过《三国演义》的有12人,读过《红楼梦》的有15人,读过《西游记》《三国演义》的有8人,读过《三国演义》《红楼梦》的有9人,读过《西游记》《红楼梦》的有7人。问三本书全都读过的有多少人?
143 0
算法提高:组合数学| 容斥原理常见应用
|
5月前
|
算法 C++ 索引
寻找最接近子数组和的算法设计及其C++实现
寻找最接近子数组和的算法设计及其C++实现
39 4
|
10月前
|
机器学习/深度学习 算法
算法分析 | 第三套(渐近符号)
算法分析 | 第三套(渐近符号)
88 0
|
机器学习/深度学习 算法
算法提高:组合数学| 卡特兰数的实现
卡特兰数列是组合数学中在各种计数问题中常出现的数列,其前几项为1,1,2,5,14,42,132,429,1430,4862,16796,58786,208012…… 卡特兰数首先是由欧拉在计算对凸n边形的不同的对角三角形剖分的个数问题时得到的,即在一个凸n边形中,通过不相交于n边形内部的对角线,把n边形拆分成若干三角形,不同的拆分数用Hn表示,Hn即卡特兰数。
135 0
算法提高:组合数学| 卡特兰数的实现
|
算法 内存技术
求组合数三种算法
求组合数三种算法
68 0
|
Python
深入理解动态规划算法 | 凑整数
深入理解动态规划算法 | 凑整数
125 0
|
算法 C++
容斥原理算法的实现
容斥原理算法的实现
容斥原理算法的实现
【分治法】整数因子分解问题
【分治法】整数因子分解问题
298 0
【分治法】整数因子分解问题