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];
                }
            }
        }
    }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM