[leetcode] 46. 全排列(Java)
Posted ACBingo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[leetcode] 46. 全排列(Java)相关的知识,希望对你有一定的参考价值。
这题我们可以借用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)的主要内容,如果未能解决你的问题,请参考以下文章