常见算法笔试题的研究2(一元多项表达式的化简)

题目
背景:

编程实现如下功能:对输入的一元多项式,进行同类项合并,并按指数降序排序,输出处理后的一元多项式。
说明:

多项式由若干个单项式组成,单项式之间为加、减(+,-)关系。
单项式指数字与字母幂的乘积构成的代数式。对一元多项式,字母只有一种。
同类项合并指将多项式中指数相同的单项式,系数经过加减求和,合并为一个单项式。按指数降序指多项式中,单项式按指数从大到小顺序相连。
格式说明

一元多项式输入输出时以字符串形式表示,格式如下

单项式之间用单个加减运算符相连,运算符:+,-
单项式由系数、字母、指数标识符、指数依次直接相连组成,各部分均不能省略。
系数:只由若干0到9数字字符组成(系数不等于0,且不以0开头)
字母:X
指数标识符:^
指数:只由若干0到9数字字符组成(指数可等于0,不等于0时不以0开头)
其他约定
输入不为空串,输出若为0则以空串表示
字符串中除以上字符,不包含空格等其他字符,字符串尾部以’\0’结束
多项式中第一个单项式前加运算时省略+符号,减运算时有-符号
注意:输入多项式符合上述格式,无需检查;输出多项式格式由考生程序保证

规格

输入多项式满足如下规格,考生程序无需检查:
–0<单项式系数<=1000<>
–0<=单项式指数<=3000<>
–单项式个数不限制,但同类项合并处理后,单项式的系数小于65535。
示例

例一
输入:
“7X^4-5X^6+3X^3”
输出:
“-5X^6+7X^4+3X^3”
例二
输入:
“-7X^4+5X^6-3X^3+3X^3+1X^0”
输出:
“5X^6-7X^4+1X^0”

解析
该题目有几个难点
1、输入的字符串如何进行分解得到单项表达式,怎么从单项表达式里面提取系数和指数?
2、每个单项表达式怎么表示?
3、具体算法怎么完成?要求单项式按指数从大到小顺序相连怎么实现?
整体思路
首先说一下我的思路:我是利用单链表的思想解决这个问题,每个单项表达式存为一个节点,先利用正则表达式将该字符串进行分解,得到一个以单项表达式为节点的链表,然后一次遍历链表里面的节点进行计算,新建一个有序的存放计算结果的链表,将计算得到的结果有序的插入,最后利用Stringbuffer将链表里面的信息转换为字符串

具体实现
1、单项表达式节点的表示

/**
 * 单项表达式节点
 *
 */
class Expression {
    char calc;//每个单项表达式前面的符号,可以是+,-
    int index;// 指数
    int ratio;// 系数
    boolean counted = false;// 该项是否已经计算过,默认情况下是没有计算过
    Expression next;//链接链表的指针
}

counted用来表示该单项表达式是否已经计算过,如果已经计算过遍历到的时候也直接跳过,不再进行计算。

2、将字符串转换为链表
代码注释的很详细,如果正则表达式看不懂的自己百度一下

private static Expression GetExpression(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值