题目描述
给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。
返回可以使最终数组和为目标数 S 的所有添加符号的方法数。
题解思路
1 递归思路,对于每次选择可以选择正数,或者负数,因此采用两次递归就能获取到两种情况的可能,间接实现了动态选择各种情况。
递归解题代码
public class DynamicSolution {
private int count = 0;
public int findTargetSumWays(int[] nums, int S) {
if (nums == null || nums.length == 0) {
return count;
}
goSolute(nums,0,0,S);
return count;
}
public void goSolute(int[] nums,int index, int sum,int S){
if (nums.length == index) {
if (sum == S) {
count++;
}
}else {
goSolute(nums,index+1,sum+nums[index],S);
goSolute(nums,index+1,sum-nums[index],S);
}
}
}
来源:oschina
链接:https://my.oschina.net/jiansin/blog/4728997