跳到主要内容

640.求解方程

链接:640.求解方程
难度:Medium
标签:数学、字符串、模拟
简介:求解一个给定的方程,将 x 以字符串 "x=#value" 的形式返回。该方程仅包含 '+' , '-' 操作,变量 x 和其对应系数。

题解 1 - rust

  • 编辑时间:2022-08-10
  • 内存消耗:2MB
  • 编程语言:rust
  • 解法介绍:拆分后解析。
use std::collections::VecDeque;
impl Solution {
pub fn solve_equation(equation: String) -> String {
let (mut l, mut r) = (0, 0);
let equation = equation.split('=').collect::<Vec<&str>>();
Solution::analysis(&mut l, &mut r, Solution::format(equation[0]), 1);
Solution::analysis(&mut l, &mut r, Solution::format(equation[1]), -1);
if l == 0 && r == 0 {
String::from("Infinite solutions")
} else if l == 0 {
String::from("No solution")
} else {
format!("x={}", r / l)
}
}
fn format(s: &str) -> String {
let mut ans = s.to_string().chars().collect::<VecDeque<char>>();
let front = ans.front().unwrap();
if *front != '+' && *front != '-' {
ans.push_front('+');
}
ans.push_front('0');
String::from_utf8(ans.iter().map(|c| *c as u8).collect::<Vec<u8>>()).unwrap()
}
fn analysis(l: &mut i32, r: &mut i32, s: String, flag: i32) {
let s = s.chars().collect::<Vec<char>>();
let mut i = 0;
while i < s.len() {
let mut num = String::new();
if i != 0 {
num.push(s[i - 1]);
}
while i < s.len() && s[i] != '+' && s[i] != '-' && s[i] != 'x' {
num.push(s[i]);
i += 1;
}
if i < s.len() && s[i] == 'x' {
if num.len() == 1 && (num.eq("+") || num.eq("-")) {
num.push('1');
}
*l += flag * num.parse::<i32>().unwrap();
i += 1;
} else {
*r += -1 * flag * num.parse::<i32>().unwrap();
}
i += 1;
}
}
}