news 2026/6/1 23:21:02

求解一元一次方程(仅含+、-、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/5/31 21:51:29

词库转换终极指南:轻松实现20+输入法无缝迁移

词库转换终极指南&#xff1a;轻松实现20输入法无缝迁移 【免费下载链接】imewlconverter ”深蓝词库转换“ 一款开源免费的输入法词库转换程序 项目地址: https://gitcode.com/gh_mirrors/im/imewlconverter 在数字化时代&#xff0c;输入法已经成为我们日常生活和工作…

作者头像 李华
网站建设 2026/6/1 8:50:02

Linux 终端下的 My Sql 常用操作指南(替代 Navicat)

本文演示在 Linux 服务器 上&#xff0c;通过 MySQL 命令行 完成日常在 Navicat 中最常用的数据库操作。适合新手&#xff0c;命令简洁&#xff0c;并附带中文注释。一、登录 MySQLmysql -u root -p-u root&#xff1a;指定登录用户-p&#xff1a;提示输入密码&#xff08;更安…

作者头像 李华
网站建设 2026/6/1 11:33:54

GLM-4.5-FP8终极指南:3550亿参数MoE大模型快速部署与实战应用

GLM-4.5-FP8终极指南&#xff1a;3550亿参数MoE大模型快速部署与实战应用 【免费下载链接】GLM-4.5-FP8 项目地址: https://ai.gitcode.com/zai-org/GLM-4.5-FP8 智谱AI最新开源的GLM-4.5-FP8大语言模型&#xff0c;以3550亿总参数和创新的混合专家&#xff08;MoE&…

作者头像 李华
网站建设 2026/6/1 8:51:35

JSLint:提升JavaScript代码质量的智能工具

JSLint&#xff1a;提升JavaScript代码质量的智能工具 【免费下载链接】jslint JSLint, The JavaScript Code Quality and Coverage Tool 项目地址: https://gitcode.com/gh_mirrors/js/jslint 还在为JavaScript代码中的潜在问题而烦恼吗&#xff1f;JSLint正是你需要的…

作者头像 李华
网站建设 2026/6/1 21:19:47

Syncthing Tray:5个让你爱上无服务器文件同步的理由

Syncthing Tray&#xff1a;5个让你爱上无服务器文件同步的理由 【免费下载链接】syncthingtray Tray application and Dolphin/Plasma integration for Syncthing 项目地址: https://gitcode.com/gh_mirrors/sy/syncthingtray 想要摆脱云存储的束缚&#xff0c;又担心复…

作者头像 李华