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位進行全排列.由...