78. Subsets


💡 に答える

var subsets = function (nums) {
  let result = [[]];

  function backtrack(first, stack) {
    for (let i = first; i < nums.length; i++) {
      stack.push(nums[i]);
      result.push([...stack]);
      backtrack(i + 1, stack);
      stack.pop();
    }
  }

  backtrack(0, []);
  return result;
};

let nums = [1, 2, 3];
console.log(subsets(nums));

📝 結果



📝 整理する


以前と同様に、これもBackTrackingの基礎問題です.問題は、numsの繰り返し不可能な配列であり、すべてのsubsetreturnであることが要求される.(=サブアレイ)BackTrackingアルゴリズムの動作原理が分かれば分かりやすい.(私はまだ完全に理解していません)
回答は次のとおりです.

  • 正解を含む2次元配列result=[[]]を発表した.
  • backtrackという名前の再帰関数を宣言します.

  • 関数では、ループ文は、first、すなわちbackTrack関数の最初のパラメータからnums配列の長さまで続く.

  • その後、stackの任意の配列にnums配列の要素が含まれる.

  • 次いで、stack配列をコピーし、result配列に入れる.

  • 関数は再び再帰的に呼び出され(他の場合、参照のために)、stackによってpop配列の要素が削除される.(BactTrack作業部)
  • 修正、指摘を歓迎します!

    質問リンク


    https://leetcode.com/problems/subsets/

    LeetCode GitHub


    https://github.com/tTab1204/LeetCode