[LeetCode]Expression Add Operators
来源:互联网 发布:有限元软件ansys 编辑:程序博客网 时间:2024/05/29 12:11
https://leetcode.com/problems/expression-add-operators/
给一个数字的字符串和一个数字target,求字符串内插入+、-、*之后结果等于的所有结果
开始以为是分治,但当发现分治所得子结果过于复杂时要放弃,转而考虑回溯+贪心。trick是记录一个参数multi,表示前一个值。该值有可能在下一位是乘法时用到。如果下一位是乘法,那么当前已经得到的val要减去multi,因为在上一层递归里面已经预先把这个multi加/减/乘到val上了。
注意:1、算式中第一个数只能加法;2、当前数前缀为0时跳出;3、转成long而非int
public class Solution { public List<String> addOperators(String num, int target) { LinkedList<String> res = new LinkedList<>(); if (num == null || num.length() == 0) { return res; } backTrace(res, num, target, "", 0, 0, 0); return res; } // 字符串表示数字的情况就把数字设为long,屡试不爽! private void backTrace(LinkedList<String> res, String num, int target, String path, int pos, long val, long multi) { if (pos == num.length()) { if (val == target) { res.add(path); } return; } for (int i = pos; i < num.length(); i++) { if (i != pos && num.charAt(pos) == '0') { break; } long cur = Long.parseLong(num.substring(pos, i + 1)); // 必须单列,否则第一个数做乘法时会因为前面没有multi而结果出错。 if (pos == 0) { backTrace(res, num, target, path + cur, i + 1, cur, cur); } else { backTrace(res, num, target, path + "+" + cur, i + 1, val + cur, cur); backTrace(res, num, target, path + "-" + cur, i + 1, val - cur, -cur); backTrace(res, num, target, path + "*" + cur, i + 1, val - multi + multi * cur, multi * cur); } } }}
0 0
- LeetCode:Expression Add Operators
- 【LeetCode】Expression Add Operators
- Expression Add Operators -- leetcode
- Leetcode -- Expression Add Operators
- LeetCode -- Expression Add Operators
- LeetCode Expression Add Operators
- leetcode:Expression Add Operators
- 《leetcode》:Expression Add Operators
- [leetCode] Expression Add Operators
- [LeetCode]Expression Add Operators
- [LeetCode] Expression Add Operators
- 【LeetCode】Expression Add Operators
- Expression Add Operators(leetcode)
- Leetcode | Expression Add Operators
- [leetcode 282]Expression Add Operators
- [leetcode] 282. Expression Add Operators
- [LeetCode]282. Expression Add Operators
- leetcode(282): Expression Add Operators
- bolg主页面
- C++获取电脑分辨率
- css display={block,inline,inline-block}的认识
- JAVA基础知识点梳理十:字符串
- GOF设计模式之VISITOR(访问者)
- [LeetCode]Expression Add Operators
- [BZOJ3545][ONTAK2010]Peaks(splay启发式合并)
- web.xml 修改时,很卡的解决办法
- muduo库的TcpServer和TcpConnection用法
- Android开发重要参考资料
- java中queue的使用
- BIO、NIO、AIO的区别——Netty系列(一)
- MAC iterm2-zsh
- 【电影】血战钢锯岭(Hacksaw Ridge)