emmm,做题的背包问题,没做出来,今天还是背包问题,dp还是不会,但是数据量比较小,可以直接暴力求解。
思路
因为数组长度最大为20,数组内的每个元素只有两种可能——加或减,所以最大只有
2
20
2^{20}
220次,大约100万+,远远小于1e7
,因此可以直接暴力求解。
因为数组内的每个元素只能进行加或减
的操作,所以直接遍历所有可能情况
就能求解。
代码
class Solution {
int count;
public int findTargetSumWays(int[] nums, int target) {
count = 0;
backward(nums, target, 0,0);
return count;
}
public void backward(int[] nums, int target, int index, int sum)
{
if (index == nums.length)
{
if (sum == target)//如果最后的结果与target相同,则计数器加1
count++;
}
else
{
//因为每个元素可以进行加法或减法操作,所以分两个方向进行递归
backward(nums, target, index+1, sum + nums[index]);
backward(nums, target, index+1, sum - nums[index]);
}
}
}