java回溯法实现任意给出从1到N的N个连续的自然数,求出这N个自然数的各种全排列。如N=3时,共有以下6种排列方式:123,132,213,231,312,321。 注意:数字不能重复,N由键盘输入。
时间: 2023-10-01 17:09:52 浏览: 79
CC++全排列..1--n的全排列以及字符串的全排列
以下是使用Java回溯法实现求解N个自然数的各种全排列的代码:
```java
import java.util.Scanner;
public class Permutation {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入N的值:");
int n = sc.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = i + 1;
}
permute(nums, 0, n - 1);
}
private static void permute(int[] nums, int start, int end) {
if (start == end) {
for (int num : nums) {
System.out.print(num);
}
System.out.println();
} else {
for (int i = start; i <= end; i++) {
swap(nums, i, start);
permute(nums, start + 1, end);
swap(nums, i, start);
}
}
}
private static void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
```
该算法使用了递归的思想,枚举每一个位置上可能出现的数字,并进行回溯,直到找到所有的全排列。其中,`permute()`方法是主要的递归函数,每次将当前位置上的数字与后面的数字交换,然后递归下一级,直到找到一个全排列,然后再回溯,将当前位置上的数字和后面的数字交换回来,继续枚举下一个数字。`swap()`方法用于交换数组中两个位置上的数字。
阅读全文