簡介:計算所給元素的所有全排列組合有多重方法,此篇文章說明字典排序方法求解全排列。何為字典排序?指的是元素按照0-9,a-z的順序排列,這樣使得與計算的全排列結果與上乙個結果具有最長的字首。
演算法原理:p = ,元素集合
1、在p中從右向左遍歷,直至查到
2、在p中從右向左遍歷,找到第乙個比
3、交換
4、將i以後的值翻轉,得到新的序列
5、重複第一步,直至所有的元素都已經是倒序排列
**實現:
public static list> permute(int nums)
result.add(new arraylist<>(tempresult));
while (true)
}// index右側大於index位置值的最小位置
int lastindex = 0;
boolean isfind = false;
for (int i = tempresult.size() - 1; i > index; i--)
}if (!isfind)
// 交換index和lastindex的值
int temp = tempresult.get(index);
tempresult.set(index, tempresult.get(lastindex));
tempresult.set(lastindex, temp);
// 將index後的元素翻轉
int len = tempresult.size() - index - 1;
for (int k = 1, l = tempresult.size() - 1; k <= len / 2; k++)
result.add(new arraylist<>(tempresult));
}return result;
}
全排列之字典序法
1 對於輸入的字典序排列,反向查詢第一對滿足a j 2 仍舊反向查詢第乙個下標k,使得 a j 3 交換a j 和a k 4 翻轉a j 1 a end 此法能適應有重複元素的系列 如下 include include using namespace std int cmp const void a...
全排列 字典序排列
include includeusing namespace std define dig num 4 void cal int str int first int last cout endl if first last bool get f l int list int former int l...
字典序全排列
思路 從左向右找到不符合遞增規律的第乙個數,比如1,2,5,4,3中的這個數就是2,將其與其右面遞增序列中的比他大的最小數,比如在前面例子中的3互換,得到1,3,5,4,2,最後,將該數右邊的遞增序列排序,得到1,3,2,4,5即可。上面這個是求某乙個數的下乙個排列,而全排列只需按這個思路,將初始陣...