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