news 2026/4/18 4:26: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/18 8:51:01

Qwen3-235B-A22B-MLX-8bit:革命性大语言模型的智能进化之路

Qwen3-235B-A22B-MLX-8bit&#xff1a;革命性大语言模型的智能进化之路 【免费下载链接】Qwen3-235B-A22B-MLX-8bit 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-235B-A22B-MLX-8bit 在人工智能技术飞速发展的今天&#xff0c;通义千问团队推出的Qwen3-23…

作者头像 李华
网站建设 2026/4/4 7:32:58

魔兽争霸III兼容性修复终极方案:让经典游戏重获新生

魔兽争霸III兼容性修复终极方案&#xff1a;让经典游戏重获新生 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper WarcraftHelper工具是专门为魔兽争霸I…

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

3个实战技巧解决Vitest中的函数命名陷阱

3个实战技巧解决Vitest中的函数命名陷阱 【免费下载链接】vitest Next generation testing framework powered by Vite. 项目地址: https://gitcode.com/GitHub_Trending/vi/vitest 在现代化测试框架Vitest中&#xff0c;函数命名看似简单却可能引发难以调试的异步行为错…

作者头像 李华
网站建设 2026/4/15 18:28:18

容器镜像优化终极指南:SLIM工具完整教程与实战解析

你是否正被臃肿的容器镜像困扰&#xff1f;构建缓慢、存储成本飙升、部署延迟——这些问题正在蚕食你的开发效率和系统可扩展性。作为CNCF沙箱项目&#xff0c;SLIM&#xff08;SlimToolkit&#xff09;通过智能分析技术&#xff0c;可将容器镜像大小减少高达97%&#xff0c;实…

作者头像 李华
网站建设 2026/4/18 5:59:54

洛谷 P3370 【模板】字符串哈希

题目描述如题&#xff0c;给定 N 个字符串&#xff08;第 i 个字符串长度为 Mi​&#xff0c;字符串内包含数字、大小写字母&#xff0c;大小写敏感&#xff09;&#xff0c;请求出 N 个字符串中共有多少个不同的字符串。友情提醒&#xff1a;如果真的想好好练习哈希的话&#…

作者头像 李华
网站建设 2026/4/18 9:22:47

精打细算的用户心智:在线购物系统收藏与购物车功能模型优化实践

精打细算的用户心智&#xff1a;在线购物系统收藏与购物车功能模型优化实践在电商竞争白热化的当下&#xff0c;收藏与购物车功能早已不是简单的“商品暂存”工具&#xff0c;而是连接用户兴趣与消费决策的核心桥梁。一款设计精良的收藏与购物车模型&#xff0c;既能降低用户决…

作者头像 李华