解题思路
给只含 +,−,∗ 的表达式加括号,求出每一种划分对应的值。相同值如果来自不同划分,要各保留一次,最后从小到大输出。数字可以是两位数,例如 12 不能拆成 1 和 2。
- 先扫描字符串:连续数字合成一个整数,运算符单独存起来。
- 设 nums[l..r] 表示第 l 个数到第 r 个数这一段。若 l=r,只有一种结果,就是这个数本身。
- 否则枚举最后一次运算发生在第 k 个运算符上(l≤k<r):左段 nums[l..k] 与右段 nums[k+1..r] 各自得到若干值,再用 ops[k] 两两组合。
- 用记忆化避免同一段被重复展开。所有划分都算完后整体排序。
- 常见假解:只按四则运算优先级算一次;结果去重;按单个数字字符拆开;忘记排序。