1原题目
给定一个含有数字和运算符的字符串,为表达式添加括号,改变其运算优先级以求出不同的结果。你需要给出所有可能的组合的结果。有效的运算符号包含 +, - 以及 * 。
2 题目大意
算加了括号后有几种结果
3.题目分析
1.先把输入字符串中的数字提取到数组inData中,运算符存放在数组inCal中
2.数组res[i][j] 表示从i到j的组合个数和结果
3.前 n 个组合 = (前 n - 1 个组合 * 后 1 个组合) + (前 n-2 个组合 * 后2个组合) + … + (前 1 个组合 * 后 n - 1 个组合)。
4基础知识
递归,分治
4.1C的语法
4.2数据结构
4.3算法
5解法
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
struct tagData {
int count;
int res[2000];
} data;
int cal(int a, int b, int cal)
{
//printf("\n %d %c %d", a, cal, b);
if (cal == '+') {
return a + b;
} else if (cal == '-') {
return a - b;
} else if (cal == '*') {
return a * b;
} else {
printf("\nerror");
return 1;
}
}
int calStaEnd(struct tagData** res, int sta, int end, int *inCal)
{
int count = end - sta;
int i;
int j;
int k;
int tmpCount = 0;
printf("\n sta:%d, end:%d", sta, end);
for (i = 1; i <= count; i++) {
for (j = 0; j