Trong phần này, chúng ta sẽ xem cách lấy tất cả các hoán vị của một chuỗi. Cách tiếp cận đệ quy rất đơn giản. Nó sử dụng quy trình theo dõi trở lại. Nhưng ở đây chúng tôi sẽ sử dụng phương pháp lặp lại.
Tất cả các hoán vị của một chuỗi ABC giống như {ABC, ACB, BAC, BCA, CAB, CBA}. Hãy để chúng tôi xem thuật toán để có ý tưởng tốt hơn.
Thuật toán
getAllPerm (str)
begin sắp xếp các ký tự của chuỗi trong khi true, in chuỗi str i:=length of str - 1 while str [i - 1]> =str [i], do i:=i - 1 nếu tôi là 0, sau đó trả về end nếu xong j:=length of str - 1 while j> i AND str [j] <=str [i - 1], do j:=j - 1 xong trao đổi ký tự từ vị trí str [i - 1], str [j] đảo ngược chuỗi. kết thúc
Ví dụ
#include#include using namespace std; void getAllPerm (string str) {sort (str.begin (), str.end ()); while (true) {cout < =str [i]) {if (--i ==0) return; } int j =str.length () - 1; while (j> i &&str [j] <=str [i - 1]) j--; swap (str [i - 1], str [j]); đảo ngược (str.begin () + i, str.end ()); }} int main () {string str ="WXYZ"; getAllPerm (str);}