我正在學習在線做一個程式并找到了這個解決方案,我想執行它并從中學習。
我不斷收到語法錯誤,有人可以幫忙格式化嗎?我嘗試過但無法理解代碼以了解我們需要在何處提供縮進等,
我在網上找不到該問題的 python 示例,我只能找到 c 答案。
class Node {
public:
virtual int Compute() = 0;
inline void SetLeft(Node* left) {
left_ = left;
}
inline void SetRight(Node* right) {
right_ = right;
}
protected:
Node* left_ = nullptr;
Node* right_ = nullptr;
};
class SumNode : public Node {
public:
inline int Compute() override {
return left_->Compute() right_->Compute();
}
};
class SubNode : public Node {
public:
inline int Compute() override {
return left_->Compute() - right_->Compute();
}
};
class MulNode : public Node {
public:
inline int Compute() override {
return left_->Compute() * right_->Compute();
}
};
class NumNode : public Node {
public:
NumNode(int num) : num_(num) {}
inline int Compute() override {
return num_;
}
private:
int num_;
};
class Solution {
public:
vector<int> diffWaysToCompute(string expression) {
vector<Node*> nodes;
// parse the expression
for(int i = 0; i < expression.size(); i) {
switch(expression[i]) {
case ' ':
nodes.emplace_back(new SumNode());
break;
case '-':
nodes.emplace_back(new SubNode());
break;
case '*':
nodes.emplace_back(new MulNode());
break;
default:
int num = 0;
while(expression[i] >= '0' && expression[i] <= '9') {
num = num * 10 expression[i] - '0';
i;
}
--i;
nodes.emplace_back(new NumNode(num));
break;
}
}
vector<Node*> trees = GenerateAllTrees(nodes, 0, nodes.size() - 1);
for(Node* node : nodes) {
delete node;
}
vector<int> results;
for(Node* tree : trees) {
results.emplace_back(tree->Compute());
delete tree;
}
return results;
}
vector<Node*> GenerateAllTrees(const vector<Node*> nodes, int beg, int end) {
if(beg == end) {
return {new NumNode(nodes[beg]->Compute())};
}
vector<Node*> results;
for(int i = beg; i <= end; i ) {
// assuming the expression is well formed, operators will be in odd positions
if((i & 1) == 0) continue;
vector<Node*> left_trees = GenerateAllTrees(nodes, beg, i - 1);
vector<Node*> right_trees = GenerateAllTrees(nodes, i 1, end);
for(Node* left : left_trees) {
for(Node* right : right_trees) {
nodes[i]->SetLeft(left);
nodes[i]->SetRight(right);
Node* result = new NumNode(nodes[i]->Compute());
results.emplace_back(result);
}
}
for(Node* t : left_trees) {
delete t;
}
for(Node* t : right_trees) {
delete t;
}
}
return results;
}
};
uj5u.com熱心網友回復:
你只需要匯入你正在使用的模塊,就像 Python 一樣,除了語法不同:
#include <vector>
#include <string>
using namespace std;
class Node {
public:
...
并且因為它使用的是emplace_back,如果您使用的是,則g 需要-std=c 11在命令列中指定。
此外,您需要了解這不是一個可運行的示例。這些只是您可以在自己的代碼中使用的類。要運行它,您需要提供一個main()函式。或許:
#include <iostream>
int main()
{
Solution s;
vector<int> result = s.diffWaysToCompute( "3 9*7-16" );
for( auto i : result )
cout << i << "\n";
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/394775.html
標籤:C
上一篇:對于常量運算式,為什么不能按照標準使用指標型別物件?
下一篇:如何正確指定遞回模板類成員函式?
