import java.util.Arrays;
import java.util.Stack;
public class Main {
private static final Stack stack = new Stack<>();
public static void main(String[] args) {
int[] nums = {1, 2, 3, 4};
System.out.println("排列:");
filter(nums, 4, 0); // 排列
stack.clear();
System.out.println("组合:");
filter(nums, 3, 0, 0);
}
static void filter(int[] nums, int target, int count) {
if (count == target) {
System.out.println(stack);
return;
}
for (int num : nums) {
if (!stack.contains(num)) {
stack.add(num);
filter(nums, target, count + 1);
stack.pop();
}
}
}
static void filter(int[] nums, int target, int has, int index) {
if (has == target) {
System.out.println(stack);
return;
}
for (int i = index; i < nums.length; i++) {
if (!stack.contains(nums[i])) {
stack.add(nums[i]);
filter(nums, target, has + 1, i);
stack.pop();
}
}
}
}