本文目錄一覽:
- 1、java全排列遞歸算法
- 2、java怎麼搞全排列
- 3、java全排列 數組
- 4、java實現全排列的問題
java全排列遞歸算法
思路:先有一個起始排列,如1234.從後面掃描,直到找到a[k],a[k]a[k+1];再從後面掃描,直到找到a[j],這裡有 a[k]a[j]。交換a[k],a[j].再把a[k+1],…a[n-1]排序(從小到大),即得到了一個排列,再循環下去,直到找出所有的排序。用C語言的,參考下:
java怎麼搞全排列
盡量用遞歸好理解一些,打個斷點
public class Permutation {
public static void permulation(int[] list, int start, int length) {
int i;
if (start == length) {
for (i = 0; i length; i++)
System.out.print(list[i] + ” “);
System.out.println();
} else {
for (i = start; i length; i++) {
swap(list, start, i);
permulation(list, start + 1, length);
swap(list, start, i);
}
}
}
public static void swap(int[] list, int start, int i) {
int temp;
temp = list;
list = list[i];
list[i] = temp;
}
public static void main(String[] args) {
int length = 3;
int start = 0;
int list[] = new int[length];
for (int j = 0; j length; j++)
list[j] = j + 1;
permulation(list, start, length);
}
}
java全排列 數組
全排列算法很多,這是其中一個,使用遞歸——
import java.util.ArrayList;
import java.util.List;
public class PermAComb {
static Listint[] allSorts = new ArrayListint[]();
public static void permutation(int[] nums, int start, int end) {
if (start == end) { // 當只要求對數組中一個數字進行全排列時,只要就按該數組輸出即可
int[] newNums = new int[nums.length]; // 為新的排列創建一個數組容器
for (int i=0; i=end; i++) {
newNums[i] = nums[i];
}
allSorts.add(newNums); // 將新的排列組合存放起來
} else {
for (int i=start; i=end; i++) {
int temp = nums; // 交換數組第一個元素與後續的元素
nums = nums[i];
nums[i] = temp;
permutation(nums, start + 1, end); // 後續元素遞歸全排列
nums[i] = nums; // 將交換後的數組還原
nums = temp;
}
}
}
public static void main(String[] args) {
int[] numArray = {1, 2, 3, 4, 5, 6};
permutation(numArray, 0, numArray.length – 1);
int[][] a = new int[allSorts.size()][]; // 你要的二維數組a
allSorts.toArray(a);
// 打印驗證
for (int i=0; ia.length; i++) {
int[] nums = a[i];
for (int j=0; jnums.length; j++) {
System.out.print(nums[j]);
}
System.out.println();
}
System.out.println(a.length);
}
}
java實現全排列的問題
對 深度優先搜索 先交換 然後遞歸 再交換回來繼續循環下一種情況
原創文章,作者:BKUHC,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/127374.html