//回溯其实就是横向遍历,纵向递归的组合。
package j12;
import utils.ListNode;
import java.util.List;
import java.util.Scanner;
class Solution {
public int sum = 0; //存放总的情况数
public void printArray(int[] A, int length) {
for (int i = 0; i < length; i++) {
System.out.print(A[i]);
}
System.out.println();
}
public void swap(int[] A, int x, int y) {
int temp = A[x];
A[x] = A[y];
A[y] = temp;
}
public void next_permutation(int[] A, int begin, int end) {
if (begin == end) {
sum = sum + 1;
printArray(A, end + 1);
} else {
for (int i = begin; i <= end; i++) {
swap(A, begin, i);
next_permutation(A, begin + 1, end);
swap(A, begin, i);
}
}
}
}
public class j13 {
public static void main(String[] args) {
Solution s = new Solution();
int[] A = {1, 2, 3};
s.next_permutation(A, 0, 2);
System.out.println("sum=" + s.sum);
}
}
测试结果1:
测试结果2:
详细原理图: