我正在研究一个多项式计算器项目,我正在研究第一部分。多项式将以特定格式表示,其中两个多项式是表示系数和指数的整数序列。这是一个例子。
4 3 -2 2 6 1
6 3 5 2 3 1
多项式1 = 4x^3 - 2x^2 + 6x
且多项式2 = 6x^3 + 5x^2 + 3x
我应该使用Linked List来实现这一点。
这是我的class Node
代码:
class Node {
int coef;
int power;
Node next;
public Node(int coef, int power) {
this.coef = coef;
this.power = power;
}
}
如何有效地分离系数和指数并添加到链接列表? 这是我推送新的多项式节点的代码:
void addPoly(int coef, int pow) {
Node newNode = new Node(coef, pow);
if (head == null) {
head = newNode;
head.next = null;
} else {
Node curr = head;
while (curr.next != null) {
curr = curr.next;
}
curr.next = newNode;
}
}
谢谢!
答案 0 :(得分:0)
您可以拆分输入,然后将每个结果字符串转换为整数。如果功率始终按降序排列,则会向后循环以降低代码复杂性。
String s = "4 3 -2 2 6 1";
int[] values = Arrays.stream(s.split(" "))
.mapToInt(Integer::valueOf)
.toArray();
assert values.length % 2 == 0;
for (int i = values.length - 1; i > 0; i = i - 2) {
int coeff = values[i - 1];
int power = values[i];
addPoly(coeff, power);
}
addPoly
可以缩减为
void addPoly(int coeff, int power) {
Node node = new Node(coeff, power);
node.next = head;
head = node;
}
在第一次迭代head
是null
,因此第一个节点成为列表的末尾。下一步是前一步。所以head
就是next
。最后但并非最不重要的是,新节点成为下一个head
。
答案 1 :(得分:0)
Java-9解决方案,使用带有两个捕获组和Pattern的正则表达式MatchResults stream:
String input = "4 3 -2 2 6 1";
Pattern p = Pattern.compile("\\s*(-?\\d+)\\s+(-?\\d+)");
// add all the polynomials to myList
p.matcher(input).results().forEach(m -> myList.addPoly(m.group(1), m.group(2));