輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。
輸入描述:
輸入乙個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。
無重複字元
class
solution
void
permutationrecursively
(vector<
int>
&nums,
int mstart,
int length, vectorint>
>
&res)
for(
int i = mstart; i < length; i++)}
};
有重複字元(leetcode 47)
// 基於46題,增加去重
class
solution
void
permutationrecursively
(vector<
int>
& nums,
int mstart,
int length, vectorint>
>
&res)
for(
int i = mstart; i < length; i++)}
if(duplication)
continue
;swap
(nums[mstart]
, nums[i]);
permutationrecursively
(nums, mstart+
1, length, res)
;swap
(nums[mstart]
, nums[i]);
}}};
如何求所有字元的組合數?
利用公式c(n, k) = c(n - 1, k) + c(n - 1, k - 1)
#include
using
namespace std;
typedef
long
long ll;
ll combination
(ll n, ll k)if(
1== k)
return
combination
(n -
1, k)
+combination
(n -
1, k -1)
;}intmain()
38 字串的排列
題目 輸入乙個字串,列印出該字串中字元的所有排列。def string rank string string list string if len string 1 return if len string 1 return string string rank2 string,0 def stri...
劍指38 字串的排列
輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串 abc,則列印出由字元 a,b,c 所能排列出來的所有字串 abc,acb,bac,bca,cab 和 cba。示例 輸入 abc 輸出 abc acbbac bcacab cba有要求排序,則需要將字串所有字元取出生成等長的char...
面試題38 字串的排列
問題1 輸入乙個字串,按字典序列印出該字串中字元的所有排列。例如輸入字串abc,則列印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。思路 abcde 第一輪,a與b交換,a與c交換,a與d交換,a與e交換,其中a每次都要回到原來的位置 第二輪,a固定,bcd...