题意:
给一个目标数和一个非负整数数组,给数组的每一个数正号或者符号,使这一列数运算的到目标数。返回添加符号的可能种数。 分析:
本来数学推导推了半天,但是无论推成什么样不可绕过的都是搜索怎么搜,遍历怎么完成。所以那些推到全没用,因为是+,-两种有限的可能,我们考虑深搜(像二叉树一样)。
深搜用递归完成,注意深搜递归的几个要素:
参数:数组本身一定要传,目标数,树已经搜索的层数(确定搜索什么时候结束)。
初始实参:数组本身,目标数,树已经搜索的层数
结束条件:树已经搜索的层数到达数组长度
递归时参数的变化:树搜索的层数加1
ublic class Solution { int count = 0; public int findTargetSumWays(int[] nums, int S) { helper(nums, S, 0); return count; } public void helper(int[] arr, int target, int n){ if(n == arr.length){ //先来递归结束条件:深搜到底 if(target == 0){ //必须是恰恰搜索完的时候达到目标才算 count++; } return; } helper(arr, target + arr[n], n + 1); helper(arr, target - arr[n], n + 1); } }
