1. /**
    2. * @param {number[]} nums
    3. * @return {number[][]}
    4. */
    5. var subsets = function(nums) {
    6. if (nums.length === 0) return [[]];
    7. let resArr = [];
    8. backtrack(nums, 0, [], resArr);
    9. return resArr;
    10. };
    11. function backtrack(nums, index, subArr, resArr) {
    12. if (Array.isArray(subArr)) {
    13. resArr.push(subArr.slice());
    14. }
    15. if (index === nums.length) {
    16. return;
    17. }
    18. for (let i = index; i < nums.length; i++) {
    19. subArr.push(nums[i]);
    20. backtrack(nums, i + 1, subArr, resArr);
    21. subArr.pop(nums[i]);
    22. }
    23. }