題意:對乙個字串str,求其字元的所有組合。例如字串abc,其組合就有a、b、c、ab、ac、bc、abc
解題思路:
上述問題等價於在字串str中,求長度為1,2,3,...,n的子串的集合。現在要解決的問題就是在長度為n的字串中求長度為m的子串有哪些。
將待處理的字串分為兩部分,第乙個字元為第一部分,剩餘的字元為第二部分。
取第乙個字元作為子串的字元,那麼在剩餘的字元中就還需要取m-1個字元
不取第乙個字元作為子串的字元,那麼就需要在剩餘的字元中取m個字元
因此上述問題就轉化為了兩部分,這兩部分都可以遞迴實現。然後對m取不同的值就可以得到所有的組合
//求長度為n的字串中m個字元的組合(m <= n), 將字串分為兩部分:第乙個字元和剩餘的字元,如果選擇了第乙個字元,那麼就需要在剩下的字元中選擇m-1個字元,如果沒有選擇第乙個字元,那麼就需要在剩下的字元中選擇m
個字元void combination(const string &str, string::size_type begpos, int num, vector&result)
cout << endl;
return;
}if(str.size() == begpos)
//選擇begpos位置的字元,然後在剩下的字元中選擇m-1個字元
result.push_back(str[begpos]);
combination(str, begpos + 1, num - 1, result);
//不選擇begpos位置的字元,然後在剩下的字元中選擇m個字元
result.pop_back();
combination(str, begpos + 1, num , result);
}void combination(const string &str)
}
字串組合
題目 輸入乙個字串,輸出該字串中字元的所有組合。舉個例子,如果輸入 abc,它的組合有a b c ab ac bc abc。假設我們想在長度為 n的字串中求 m個字元的組合。我們先從頭掃瞄字串的第乙個字元。針對第乙個字元,我們有兩種選擇 一是把這個字元放到組合中去,接下來我們需要在剩下的 n 1個字...
字串的組合
問題描述 輸入乙個字串,輸出它的所有組合。例如,輸入abc,則輸出 a b c ab ac bc abc。分析 如果輸入的字串的長度為n,則這個字串能構成長度為1的組合 長度為2的組合 長度為n的組合。在求n個字元的長度為m 1 m n 的組合的時候,我們可以把這n個字元分成兩部分 第乙個字元和其餘...
字串的組合
劍指offer上的拓展題目,輸入乙個字串,輸出該字串的字元的所有組合,比如輸入字串 abc,輸出a b c ab ac bc abc。可以考慮求長度為n的字串中m個字元的組合,設為c n,m 原問題的解即為c n,1 c n,2 c n,n 的總和。對於求c n,m 從第乙個字元開始掃瞄,每個字元有...