给定一个整数数组 nums 和一个整数 target。数组长度不超过 20。向数组中每个整数前加 + 或 -。然后串联起来构造成一个表达式。

要求:返回通过上述方法构造的、运算结果等于 target 的不同表达式数目。

暴力方法就是使用深度优先搜索对每位数字遍历 +、-,并统计符合要求的表达式数目。但是实际发现超时了。所以采用动态规划的方法来做。

动态规划的状态转移方程为:dp[i] = dp[i] + dp[i-num],意思为填满容量为 i 的背包的方法数 = 不使用当前 num,只使用之前元素填满容量为 i 的背包的方法数 + 填满容量 i - num 的包的方法数,再填入 num 的方法数。