思想:1、string s 首先找到s[i]2、在max_index+1至s.size()(不包括)中,尋找大於s[max_index]的最小值,並記錄下標,即**中min_index
3、交換s[max_index]和s[min_index]
4、翻轉s[max_index+1]至s[s.size()-1],得到最終結果
例如:768321
max_index=1 ;
min_index=2;
交換之後為 786321,翻轉之後為781236
#include#include#include#includeusing namespace std;
bool fullarray(string& s)
} //cout << s << endl;
swap(s[max_index], s[min_index]);
//cout << s << endl;
reverse(s.begin() + max_index + 1, s.end());
return true;
}int main()
system("pause");
return 0;
}
全排列 字典序排列
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即可。上面這個是求某乙個數的下乙個排列,而全排列只需按這個思路,將初始陣...
字典序全排列
給出正整數n,則1 n這n個數可以構成n!種排列,把這些排列按照從小到大的順序 字典順序 列出,如n 3時,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1 這6個排列。字典序演算法如下 假設這n個數的某乙個排列為 p p1 p2 p3.pj 1 pj pj 1.pk 1 ...