46 Permutation

用swap swap的办法求解。
这里是Java的一点不好的地方,我要把int[] nums 用在Arrays.asList上, 必须得把它先转成Integer[].
也可以不转,就不用Arrays.asList,就直接一个个加进结果里面就好了 。
Java版本

    public List> permute(int[] nums) {
        List> ans = new ArrayList<>();
        Integer[] numsInteger = new Integer[nums.length];
        for (int i = 0; i < nums.length; i++) {
            numsInteger[i] = nums[i];
        }
        permuteHelper(ans, numsInteger, 0);
        return ans;
    }
    private void permuteHelper(List> ans, Integer[] nums, int index) {
        if (index == nums.length) {
            ans.add(new ArrayList<>(Arrays.asList(nums)));
            return;
        }
        for (int i = index; i < nums.length; i++) {
            swap(nums, i, index);
            permuteHelper(ans, nums, index + 1);
            swap(nums, i, index);
        }
    }
    private void swap(Integer[] nums, int i, int j) {
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }

C++版本

class Solution {
public:
    vector> permute(vector& nums) {
        vector> ans;
        dfs(nums, ans, 0);
        return ans;
    }
private:
    void dfs(vector& nums, vector>& ans, int index) {
        if (index == nums.size() - 1) {
            ans.emplace_back(nums);
            return;
        }
        for (int i = index; i < nums.size(); i++) {
            swap(nums[i], nums[index]);
            dfs(nums, ans, index + 1);
            swap(nums[i], nums[index]);
        }
    }
};

你可能感兴趣的:(46 Permutation)