[leetcode][40]Combination SumII解答!
数字をあげましょうそれらの数字を組み合わせて、私の欲しい数字の組み合わせを見つけます!
でも、見つけた組み合わせの間に重複があってはいけません!!私がくれた数字よりもっと書けない!!!
トピックコードのホームページと問題の説明を参照してください.問題に答える
🔑 問題を解く
すべての状況がチェックされますか?結果は繰り返されませんか?じゃあ押して
こんな方法がありましたが、この方法で解けるようになったので、別の方法を探しました!
だから私はどうやって解いたの?
答えが繰り返されるのは、同じ数字の間に何の違いもなく道を作ったからだ.
同じ数字を书く道を一度だけ渡せばいいんだ!!!ドゥドゥ
例:
[1,2,2,2,5]の値が5の場合、
1,2,5を通る道は一度だけチェックする必要があります.
2番目の2を検査しなくても、3番目の2を検査しなくてもいいです.
🥽 ソースコードとソースコード分析
var combinationSum2 = function (candidates, target) {
candidates.sort((a, b) => a - b); // 오름차순
let answer = [];
/**
* @param {number[]} candidates
* @param {number[]} path
* @param {number} start
* @param {number} target
*/
const dfs = (_candidates, path, start, _target) => {
// 다음 값도 체크해야한다!
if (_target === 0) {
answer.push(path);
return;
}
if (_target < 0 || start > _candidates.length - 1) return;
let next = start;
while (_candidates[start] === _candidates[next]) next++;
dfs(_candidates, path, next, _target);
path.push(_candidates[start]);
dfs(_candidates, [...path], start + 1, _target - _candidates[start]);
path.pop();
};
dfs(candidates, [], 0, target);
return answer;
};
🔨 問題ポストおもしろい.
人の草を見るのもおもしろい.
世界は天才に満ちていて、私の時間は足りません.
Reference
この問題について([leetcode][40]Combination SumII解答!), 我々は、より多くの情報をここで見つけました https://velog.io/@qnfmtm666/leetcode40-Combination-Sum-II-문제풀기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol