演算法 字串的全排列

2021-07-03 04:14:04 字數 784 閱讀 5008

from 

輸入乙個字串,列印出該字串中字元的所有排列。

例如輸入字串abc,則輸出由字元a、b、c 所能排列出來的所有字串

abc、acb、bac、bca、cab 和 cba。

解法一、遞迴實現

從集合中依次選出每乙個元素,作為排列的第乙個元素,然後對剩餘的元素進行全排列,如此遞迴處理,從而得到所有元素的全排列。以對字串abc進行全排列為例,我們可以這麼做:以abc為例

#include "stdafx.h"

#include "stdio.h"

#include "iostream"

using namespace std;

//字串的全排列

void calcallpermutation(char* perm, int from, int to)

int i,j;

if (from == to)

// 已經找到所有排列

if (i < 0)

int k;

//②找到排列中第i位右邊最後乙個比ai 大的位置j,y = aj

for (k = num - 1; (k > i) && (perm[k] <= perm[i]); --k)

//③交換x,y

swap(perm[i], perm[k]);

//④把第(i+ 1)位到最後的部分翻轉

reverse(perm + i + 1, perm + num);

return true;

}

字串全排列演算法

輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串abc,則輸出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba 這是典型的遞迴求解問題,遞迴演算法有四個特性 對於字串的排列問題 如果能生成n 1個元素的全排列,就能生成n個元素的全排列。對於只有乙個元素的集...

演算法 字串全排列演算法

最近在牛客和領扣上刷題,碰到了一些全排列的問題,總結一下。我們首先來看乙個問題?題目 字串的排列 題目描述 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。解題思路 使用遞迴的方式來...

演算法 字串之全排列

字串的全排列是字串類的演算法題的乙個考察點,屬於普通問題,它有兩種實現方法,遞迴演算法和非遞迴演算法,非遞迴的方法要稍微難一點,以下會依次進行介紹。演算法思想 求n位的字串的全排列,先確定第0位,然後對後面n 1位進行全排列,在對n 1為進行全排列時,先確定第1位,然後對後面的n 2位進行全排列.由...