news 2026/4/23 12:25:22

求解一元一次方程(仅含+、-、x)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
求解一元一次方程(仅含+、-、x)

在算法题中,求解一元一次方程是一个经典的字符串处理与数学结合的问题。本文将带大家实现一个函数,能够解析仅包含 + 、 - 、变量 x 及其系数的方程,并返回指定格式的解。

问题分析

给定一个一元一次方程字符串(如 x+5-3+x=6+x-2 ),我们需要:

1. 将方程拆分为左边和右边两个部分(以 = 为界)。
2. 分别计算左右两边的 x 系数总和和常数项总和。
3. 通过移项合并得到标准形式 ax = b ,再根据 a 和 b 的值判断解的情况:
- 若 a = 0 且 b = 0 :方程有无限解。
- 若 a = 0 且 b ≠ 0 :方程无解。
- 若 a ≠ 0 :计算 x = b / a ,题目保证此时解为整数,返回 x=#value 。

核心思路:拆分与统计

处理方程的关键在于正确解析每一项的符号、系数和类型(含x/常数)。我们可以编写一个辅助函数,接收一个表达式(如 x+5-3+x ),返回该表达式的 (x系数, 常数项) 。

解析表达式的规则:

- 表达式的开头默认符号为 + (如 x+5 等价于 +x+5 )。
- 遍历表达式,逐个提取项:
- 遇到 + 或 - 时,确定当前项的符号,并开始提取项的内容。
- 项的内容若以 x 结尾:
- 项为 x 或 -x :系数为 ±1 。
- 项为 ax (a为数字):系数为 ±a 。
- 项的内容不含 x :为常数项,值为 ±数字 。

完整代码实现(Java 版)

java

public class SolveEquation {
public String solveEquation(String equation) {
String[] parts = equation.split("=");
// 解析左右两边
int[] left = parseExpression(parts[0]);
int[] right = parseExpression(parts[1]);

// 移项合并:ax = b
int a = left[0] - right[0];
int b = right[1] - left[1];

// 判断解的情况
if (a == 0) {
return b == 0 ? "Infinite solutions" : "No solution";
} else {
return "x=" + (b / a);
}
}

// 辅助函数:解析表达式,返回 [x系数, 常数项]
private int[] parseExpression(String expr) {
int coeffX = 0;
int constant = 0;
int n = expr.length();
int i = 0;

while (i < n) {
// 确定当前项的符号
char sign = '+';
if (expr.charAt(i) == '+' || expr.charAt(i) == '-') {
sign = expr.charAt(i);
i++;
}

// 提取当前项的数字部分(可能为空,如 x 对应 "")
StringBuilder numStr = new StringBuilder();
while (i < n && Character.isDigit(expr.charAt(i))) {
numStr.append(expr.charAt(i));
i++;
}

// 判断是否是含x的项
if (i < n && expr.charAt(i) == 'x') {
int num = numStr.length() == 0 ? 1 : Integer.parseInt(numStr.toString());
coeffX += sign == '+' ? num : -num;
i++; // 跳过 x
} else {
// 常数项
int num = numStr.length() == 0 ? 0 : Integer.parseInt(numStr.toString());
constant += sign == '+' ? num : -num;
}
}
return new int[]{coeffX, constant};
}

public static void main(String[] args) {
SolveEquation solution = new SolveEquation();
System.out.println(solution.solveEquation("x+5-3+x=6+x-2")); // 输出 x=2
System.out.println(solution.solveEquation("x=x")); // 输出 Infinite solutions
System.out.println(solution.solveEquation("2x+3x-6x=x+2")); // 输出 x=-1
System.out.println(solution.solveEquation("x=x+1")); // 输出 No solution
}
}


代码解释

1. split("="):将方程拆分为左右两个表达式,分别解析。
2. parseExpression 函数:核心的表达式解析逻辑,通过遍历字符区分 x 项和常数项,统计各自的总和。
3. 移项计算: a = 左边x系数 - 右边x系数 , b = 右边常数项 - 左边常数项 ,将方程转化为 ax = b 的标准形式。
4. 解的判断:根据 a 和 b 的值,返回对应的结果字符串。

测试用例验证

输入方程 输出结果 说明
x+5-3+x=6+x-2 x=2 合并后为 2x+2 = x+4 → x=2
x=x Infinite solutions 0x=0,无限解
2x+3x-6x=x+2 x=-1 合并后为 -x = x+2 → -2x=2 → x=-1
x=x+1 No solution 0x=1,无解

总结

本题的核心在于字符串的精细处理和一元一次方程的数学逻辑,通过拆分问题、编写辅助函数的方式,能够清晰地实现解题思路。该方法时间复杂度为 O(n)(n为方程长度),空间复杂度为 O(1),是高效且简洁的解法。

无论是面试还是算法练习,这类字符串与数学结合的题目都非常考验基础能力,希望本文能帮助大家掌握这类题的解题技巧。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 10:47:59

G-Helper华硕优化工具:3分钟快速配置,性能调优秘诀全解析

G-Helper华硕优化工具&#xff1a;3分钟快速配置&#xff0c;性能调优秘诀全解析 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other mo…

作者头像 李华
网站建设 2026/4/23 10:49:58

Wallpaper Engine下载器终极指南:3步实现创意工坊壁纸自由

Wallpaper Engine下载器终极指南&#xff1a;3步实现创意工坊壁纸自由 【免费下载链接】Wallpaper_Engine 一个便捷的创意工坊下载器 项目地址: https://gitcode.com/gh_mirrors/wa/Wallpaper_Engine 还在为繁琐的壁纸下载流程而烦恼吗&#xff1f;Wallpaper Engine下载…

作者头像 李华
网站建设 2026/4/23 10:49:51

Qt------信号槽,属性,对象树

目录1&#xff0c;信号槽1.1&#xff0c;槽函数执行顺序1.2&#xff0c;获取信号发出者1.3&#xff0c;断开连接1.4&#xff0c;QSignalMapper 用法1&#xff0c;信号槽 1.1&#xff0c;槽函数执行顺序 1&#xff0c;槽函数执行顺序 connect(this,SIGNAL(downloadFile()),th…

作者头像 李华
网站建设 2026/4/23 12:19:24

边缘计算开源项目终极指南:零成本构建智能物联网系统

边缘计算开源项目终极指南&#xff1a;零成本构建智能物联网系统 【免费下载链接】Awesome-GitHub-Repo 收集整理 GitHub 上高质量、有趣的开源项目。 项目地址: https://gitcode.com/gh_mirrors/aw/Awesome-GitHub-Repo 还在为物联网设备响应迟缓而烦恼&#xff1f;云端…

作者头像 李华
网站建设 2026/4/23 12:23:40

DownKyi哔哩下载姬:B站视频批量下载与格式转换完整教程

DownKyi作为一款专为哔哩哔哩平台设计的开源视频下载工具&#xff0c;能够完美支持从标清到8K超高清的各种画质&#xff0c;包括HDR和杜比视界等特殊格式。这款工具为B站用户提供了全方位的视频获取和处理解决方案&#xff0c;让视频下载变得简单高效。 【免费下载链接】downky…

作者头像 李华
网站建设 2026/4/21 15:04:02

多模态智能体在复杂环境中的协同决策能力评估与技术突破路径

多模态智能体在复杂环境中的协同决策能力评估与技术突破路径 【免费下载链接】factorio-learning-environment A non-saturating, open-ended environment for evaluating LLMs in Factorio 项目地址: https://gitcode.com/GitHub_Trending/fa/factorio-learning-environment…

作者头像 李华