简单的整理一下全排列思路。全部遍历,打印前筛选条件。全部遍历则是交换,递归,还原。
package SortSet;
public class PermOrder {
private int[] a;
public PermOrder(int[] a) {
this.a = a;
}
public static void main(String[] args) {
int[] a = { 1, 2, 3, 4, 5 };
new PermOrder(a).premOrder(0);
}
public void premOrder(int n) {
if (n == a.length) {
check();
} else {
for (int i = n; i < a.length; i++) {
swap(i, n);
premOrder(n + 1);
swap(i, n);
}
}
}
private void check() {
if (a[2] != 3)
print();
}
private void print() {
for (int i : a)
System.out.print(i + " ");
System.out.println();
}
private void swap(int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
如果全排列其他东西,把int数组换成string数组之类就OK了。如果要去除重复的话则需要在swap之前做校验了。