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