J'essaie de résoudre la question de la somme cible ( https://leetcode.com/problems/target-sum/description/ )
You are given a list of non-negative integers,
a1, a2, ..., an, and a target, S. Now you have 2 symbols
+ and -. For each integer, you should choose one from
+ and - as its new symbol. Find out how many ways to assign symbols
to make sum of integers equal to target S
J'ai pu passer les cas de base mais le cas avec ( [0,1], 1
) échoue.
J'essaie de comprendre ce que je fais de mal et comment je peux le réparer.
var findTargetSumWays = function(nums, total) {
const res = [];
let str = nums.join('');
helper(str, '', 0);
function helper(str, curStr, sum) {
if(str.length===0) return;
if(sum + Number(str) === total) {
res.push(`${curStr}+${str}`);
return;
}
if(sum - Number(str) === total) {
res.push(`${curStr}-${str}`);
return;
}
for(let i=0; i<str.length; i++) {
helper(str.substring(i+1), `${curStr}+${str.substring(0, i+1)}`, sum+Number(str.substring(0, i+1)));
helper(str.substring(i+1), `${curStr}-${str.substring(0, i+1)}`, sum-Number(str.substring(0, i+1)))
}
}
return res.length;
};
console.log(findTargetSumWays([1, 1, 1, 1, 1], 3)); // Returns correct answer.
console.log(findTargetSumWays([1, 0], 1)); // Expected 2
J'essaie de comprendre ce qui ne va pas pour la deuxième entrée.
Mon algorithme est le suivant :
1) Convertissez le tableau en une chaîne de caractères.
2) Faites DFS sur des nombres, par exemple : '123456'.