给定一个整数数组,和一个单独的数字,在数组的每一个元素中间填加 "+"或"-" 使其运算结果等于单独的数字例如给定的数组为{7 2 4} ,数字为 9。运算结果为7-2+4=9
规则1:数组中元素的位置不能变化。
规则2:如果无法实现则输出 Invalid
举例:
Input:
1 2 3 4 10
1 2 3 4 5
Output:
1+2+3+4=10
Invalid
我的算法是:
1、将所有数字和要求结果累加,如果结果为奇数,则直接输出无结果;
2、将数字按照将序由左向右排列;
3、将所有数字前全部填“+”;
4、由最小数字开始往左填“-”,并计算结果是否小于或等于要求结果,如果大于要求结果,则继续将左侧下一个数字填“-”,并再次计算;如果等于要求结果,则直接按照填写的加减号输出结果;如果小于结果,则记录下填写“-”的个数;
5、从2的“-”个数次方开始循环,步长为1,到2的所有数字个数次方,将每个数字转化为二进制字符串,用这个字符串来代表每个数字前的加减号,“0”代表正数,“1”代表负数,例如:五个数字,分别为5、4、3、2、1;计算的的二进制串是101,则每个数字的正负号按照顺序为+5,+4,-3,+2,-1;
6、累加所有数字,如果结果为要求的结果则将数字的正负号填入未排序的数字的加减号位并输出,如果不是则,恢复所有数字为正数,继续循环下一个二进制字符串;
7、通过递归方法重复1-6步运算,从而实现分段的排除不需要计算的运算;
注:如果log(每次循环的数字,2)是一个整数,则将结果减去二进制串中字符为1的所有左侧数字生成新的结果,并将右侧数字再次重复步骤4-6;
程序代码正在编写中.......;欢迎留言