【Leetcode】494. ターゲットと(再帰)
タイトルの説明
非負の整数配列,a 1,a 2,...,an,およびターゲット数,Sが与えられる.2つの記号+と-があります.配列内の任意の整数について、+または-から記号を選択して前に追加できます.最終配列と目標数Sのすべてのシンボルを追加できるメソッド数を返します.例:
入力:nums:[1,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+1=3+1+1+1+1+1+1=3+1+1+1+1=3の5つの方法で最終目標とを3にします.
ヒント:
配列は空ではなく、長さは20を超えません.初期の配列の和は1000を超えません.返される最終結果が32ビット整数で保存されることを保証します.
ACコード:
非負の整数配列,a 1,a 2,...,an,およびターゲット数,Sが与えられる.2つの記号+と-があります.配列内の任意の整数について、+または-から記号を選択して前に追加できます.最終配列と目標数Sのすべてのシンボルを追加できるメソッド数を返します.例:
入力:nums:[1,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+1=3+1+1+1+1+1+1=3+1+1+1+1=3の5つの方法で最終目標とを3にします.
ヒント:
配列は空ではなく、長さは20を超えません.初期の配列の和は1000を超えません.返される最終結果が32ビット整数で保存されることを保証します.
ACコード:
class Solution {
public:
void recur(vector<int>& nums,int n,int S,int sum,int step,int &ans){
if(n==step){
ans+=sum+nums[step]==S;
ans+=sum-nums[step]==S;
return;
}
recur(nums,n,S,sum+nums[step],step+1,ans);
recur(nums,n,S,sum-nums[step],step+1,ans);
return;
}
int findTargetSumWays(vector<int>& nums, int S) {
int n=nums.size()-1;
int ans=0;
recur(nums,n,S,0,0,ans);
return ans;
}
};