C语言数字加上一个括号,在C ++中添加括号的不同方法

假设我们有一串数字和运算符,我们必须通过计算将数字和运算符分组的所有可能方式来找到所有可能的结果。有效的运算符为+,-和*。因此,如果输入类似“ 2 * 3-4 * 5”,则输出将为[-34,-14,-10,-10、10]。这是因为-(2 *(3-(4 * 5)))= -34

((2 * 3)-(4 * 5))= -14

((2 *(3-4))* 5)= -10

(2 *((3-4)* 5))= -10

((((2 * 3)-4)* 5)= 10

为了解决这个问题,我们将遵循以下步骤-定义一个称为备忘录的映射。

定义一个称为的方法solve()。这将输入字符串作为输入。

创建一个名为ret的数组

如果备忘录已输入,则返回备忘录[输入]

对于范围在0到输入字符串大小的i-数组part1:= solve(输入的子串从0到i-1)

数组part2:= solve(从i到字符串结尾的输入子字符串)

对于范围0到第1部分大小的j

如果输入[i]是加法,则

如果输入[i]是乘法,则

如果输入[i]是减法,则

执行part [j] + part [k]并添加到ret执行part [j] * part [k]并添加到ret

执行part [j]-part [k]并添加到ret对于范围0至第2部分大小的k

如果input [i]是任何受支持的运算符,则

如果ret为空,则以整数形式返回输入字符串

memo [input]:= ret,然后返回ret

范例(C ++)

让我们看下面的实现以更好地理解-#include 

using namespace std;

void print_vector(vector v){

cout <

for(int i = 0; i

cout <

}

cout <

}

class Solution {

public:

map > memo;

vector diffWaysToCompute(string input) {

vector  ret;

if(memo.count(input)) return memo[input];

for(int i = 0; i 

if(input[i] == '+' || input[i] == '*' || input[i] == '-'){

vector  part1 = diffWaysToCompute(input.substr(0, i));

vector  part2 = diffWaysToCompute(input.substr(i + 1));

for(int j = 0; j 

for(int k = 0; k 

if(input[i] == '+'){

ret.push_back(part1[j] + part2[k]);

}

else if(input[i] == '*'){

ret.push_back(part1[j] * part2[k]);

} else {

ret.push_back(part1[j] - part2[k]);

}

}

}

}

}

if(ret.empty()){

ret.push_back(stoi(input));

}

return memo[input] = ret;

}

};

main(){

Solution ob;

print_vector(ob.diffWaysToCompute("2*3-4*5"));

}

输入值"2*3-4*5"

输出结果[-34, -10, -14, -10, 10, ]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值