题目
题目地址:https://leetcode-cn.com/problems/target-sum/
给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。
返回可以使最终数组和为目标数 S 的所有添加符号的方法数。
示例 1:
1 2 3 4 5 6 7 8 9 10 11
| 输入: nums: [1, 1, 1, 1, 1], S: 3 输出: 5 解释:
-1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3
一共有5种方法让最终目标和为3。
|
答案
使用递归实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| package com.jarome.leetcode.test1;
public class SolutionSumWays {
public int findTargetSumWays(int[] nums, int S) { return count(nums, S, 0, 0); }
private int count(int[] nums, int S, int base, int index) { if (index == nums.length) { if (base == S) { return 1; } return 0; } int newIndex = index + 1; int count = 0; count = count + count(nums, S, base - nums[index], newIndex); count = count + count(nums, S, base + nums[index], newIndex); return count; }
public static void main(String[] args) { int[] nums = {1, 1, 1, 1, 1}; SolutionSumWays s = new SolutionSumWays(); int targetSumWays = s.findTargetSumWays(nums, 3); System.out.println(targetSumWays); } }
|