282. 给表达式添加运算符
生活随笔
收集整理的這篇文章主要介紹了
282. 给表达式添加运算符
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
282. 給表達式添加運算符
給定一個僅包含數(shù)字 0-9 的字符串 num 和一個目標值整數(shù) target ,在 num 的數(shù)字之間添加 二元 運算符(不是一元)+、- 或 * ,返回所有能夠得到目標值的表達式。
示例 1:輸入: num = "123", target = 6 輸出: ["1+2+3", "1*2*3"] 示例 2:輸入: num = "232", target = 8 輸出: ["2*3+2", "2+3*2"]示例 3:輸入: num = "105", target = 5 輸出: ["1*0+5","10-5"]示例 4:輸入: num = "00", target = 0 輸出: ["0+0", "0-0", "0*0"]示例 5:輸入: num = "3456237490", target = 9191 輸出: []解題思路
代碼
class Solution {List<String> res=new ArrayList<>();int t;public List<String> addOperators(String num, int target) {t=target;int c=0;for (int i=0;i<num.length()-1;i++){c=(c*10)+num.charAt(i)-'0';operator(num,i+1,""+c);if (i==0&&num.charAt(i)=='0')break;}if(num.equals(""+target))res.add(num);return res;} public long calculate(String s) {Stack<Long> stack=new Stack<>();Stack<Long> characterStack=new Stack<>();int n=s.length();int i = 0,sign=1,cur=0;while ( i < n) {char c = s.charAt(i);if(c==' '){i++;continue;}if(Character.isDigit(c)){long sum=0;while (i < n&&Character.isDigit(s.charAt(i))){sum*=10;sum+=s.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 sum=0;i++;while (s.charAt(i)==' ') i++;while (i < n&&Character.isDigit(s.charAt(i))){sum*=10;sum+=s.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 (s==num.length()){if (calculate(sb)==t)res.add(sb);return;}int c=0;for (int i=s;i<num.length();i++){c=(c*10)+num.charAt(i)-'0';operator(num,i+1,sb+"+"+c);operator(num,i+1,sb+"-"+c);operator(num,i+1,sb+"*"+c);if (i==s&&num.charAt(i)=='0')break;}} }總結(jié)
以上是生活随笔為你收集整理的282. 给表达式添加运算符的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到坟墓打什么码
- 下一篇: 5886. 如果相邻两个颜色均相同则删除