java 实现全排列

    public List<List<Integer>> permute(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        f1(0, nums, res);
        return res;
    }

    private void f1(int i, final int[] nums, List<List<Integer>> res) {
        if (i == nums.length) {
            //记录当前解
            List<Integer> one = new ArrayList<>();
            for (int num : nums) {
                one.add(num);
            }
            res.add(one);
        } else {
            /*当前元素和它后面的每个元素交换,
             *交换后进入下一个元素的交换,返回后再换回来
             */
            for (int j = i; j < nums.length; j++) {
                if (i != j) {
                    //用异或操作交换,省去中间变量
                    nums[i] ^= nums[j];
                    nums[j] ^= nums[i];
                    nums[i] ^= nums[j];
                }
                f1(i + 1, nums, res);
                if (i != j) {
                    nums[i] ^= nums[j];
                    nums[j] ^= nums[i];
                    nums[i] ^= nums[j];
                }
            }
        }
    }

 

posted @ 2018-03-21 15:34  即便那总是过去  阅读(1875)  评论(0编辑  收藏  举报