字串的排列

2021-08-16 01:20:46 字數 1119 閱讀 7234

1、題目描述

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。

2、**

2.1題目思路:

基本的思路是:乙個字串的排列等於第一字元和後面剩餘字串排列的組合,對於含有n字元的字串,組合中第乙個字串有n種可能,那麼將所有的字串輪流放在組合第乙個當第乙個字元,其餘的n-1的字串再計算其排列。因為這就是乙個遞迴的過程。

2.2**:

#include

#include

#include

using

namespace

std;

class solution

/*函式功能:對乙個字串計算其排列

函式引數: string str -- 待排列的字串

int begin -- 當前原始字串中當組合第乙個字元的下標

vector& vecstr -- 儲存字串的組合

*/void permutation1(string str, int begin, vector

& vecstr)

//這裡的i從begin開始,相當於當前permutation1函式只處理從begin之後的字串

for(int i=begin;iif(str[i]==str[begin]&&i!=begin) //去重

continue;

swap(str[i],str[begin]); //交換兩個字元的位置

permutation1(str, begin+1, vecstr);

swap(str[i],str[begin]); //當前位置處理後,交換回字元的位置}}

};void prints(string s)

int main()

3分析:

這個題目,主要是考察對遞迴思想和問題分解的能力。對於很多問題,把乙個大問題分解成乙個個的小的問題,再遞迴處理,是基本的解決方法。

字串排列

在網上看到了乙個操作字串的題目,該題為 字串排列。大概意思是列出字串中所有字元的所有組合並且輸出無重複。自己做了一下,這裡分享該題的思路,和做法。自我覺得實現的有些麻煩 歡迎指點。問題輸入乙個字串,列印出該字串中字元的所有排列。輸入 字串abc。輸出 列印出由字元a,b,c所能排列出來的所有字串ab...

字串排列

輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。第一種方法 字串拼接 function permutate str else return result console.log pe...

字串的排列

題目 輸入乙個字串,列印出該字串中字元的所有排列。例如輸入字串 abc,則輸出由字元a b c所能排列出來的所有字串 abc acb bac bca cab和 cba。分析 這是一道很好的考查對遞迴理解的程式設計題,因此在過去一年中頻繁出現在各大公司的面試 筆試題中。我們以三個字元 abc為例來分析...