標籤:void 全排列 沒有 integer length array ons tco boolean
46. 全排列
這題我們可以借用31. 下一個排列寫的nextPermutation函數來做,稍微改造一下即可
注意要先給nums排個序
class Solution { // 當沒有下一個排列時return false public boolean nextPermutation(int[] nums) { if (nums.length == 1) { return false; } int p = -1; for (int i = nums.length - 2; i >= 0; i--) { if (nums[i] < nums[i + 1]) { p = i; break; } } if (p != -1) { int tmp = nums[p]; int q = nums.length - 1; while (nums[q] <= tmp) { q--; } nums[p] = nums[q]; nums[q] = tmp; reverse(p + 1, nums); } else {// reverse(0, nums); return false; } return true; } public void reverse(int k, int[] nums) { if (k >= nums.length) return; int i = k; int j = nums.length - 1; while (i < j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; i++; j--; } } public List<List<Integer>> permute(int[] nums) { Arrays.sort(nums); List<List<Integer>> ans = new ArrayList<>(); do { List<Integer> tmp = new ArrayList<>(); for (int num : nums) { tmp.add(num); } ans.add(tmp); } while (nextPermutation(nums)); return ans; }}
[leetcode] 46. 全排列(Java)