怎么建立网站的步骤,?]后台的网站可以备案吗,专业网络推广公司排名,erp软件培训282. 给表达式添加运算符
给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target #xff0c;在 num 的数字之间添加 二元 运算符#xff08;不是一元#xff09;、- 或 * #xff0c;返回所有能够得到目标值的表达式。
示例 1:输入: num 123, targ…282. 给表达式添加运算符
给定一个仅包含数字 0-9 的字符串 num 和一个目标值整数 target 在 num 的数字之间添加 二元 运算符不是一元、- 或 * 返回所有能够得到目标值的表达式。
示例 1:输入: num 123, target 6
输出: [123, 1*2*3] 示例 2:输入: num 232, target 8
输出: [2*32, 23*2]示例 3:输入: num 105, target 5
输出: [1*05,10-5]示例 4:输入: num 00, target 0
输出: [00, 0-0, 0*0]示例 5:输入: num 3456237490, target 9191
输出: []解题思路
使用递归的方法生成所有可能产生的表达式利用基本计算器的代码计算出所有表达式的值找出满足题意的表达式
代码
class Solution {ListString resnew ArrayList();int t;public ListString addOperators(String num, int target) {ttarget;int c0;for (int i0;inum.length()-1;i){c(c*10)num.charAt(i)-0;operator(num,i1,c);if (i0num.charAt(i)0)break;}if(num.equals(target))res.add(num);return res;} public long calculate(String s) {StackLong stacknew Stack();StackLong characterStacknew Stack();int ns.length();int i 0,sign1,cur0;while ( i n) {char c s.charAt(i);if(c ){i;continue;}if(Character.isDigit(c)){long sum0;while (i nCharacter.isDigit(s.charAt(i))){sum*10;sums.charAt(i)-0;i;}stack.push(sum);i--;}else {if(c||c-){if(!characterStack.isEmpty()){stack.push(stack.pop()*characterStack.pop()stack.pop());}characterStack.push(c?1L:-1L);}else{int sum0;i;while (s.charAt(i) ) i;while (i nCharacter.isDigit(s.charAt(i))){sum*10;sums.charAt(i)-0;i;}if(c*)stack.push(stack.pop()*sum);elsestack.push(stack.pop()/sum);i--;}}i;}return stack.size()1?stack.pop():stack.pop()*characterStack.pop()stack.pop();}public void operator(String num, int s,String sb) {if (snum.length()){if (calculate(sb)t)res.add(sb);return;}int c0;for (int is;inum.length();i){c(c*10)num.charAt(i)-0;operator(num,i1,sbc);operator(num,i1,sb-c);operator(num,i1,sb*c);if (isnum.charAt(i)0)break;}}
}