Nic*_*Law 1 c++ recursion combinations
给出 C++ 中没有重复的字符串的所有可能组合。输入示例:“123”,输出组合为:
1,12,123,13,2,23,3.
Run Code Online (Sandbox Code Playgroud)
重复的示例为“12”==“21”或“123”==“213”。
假设一个字符不会被多次使用。我也不认为递归是强制性的。
这里有一个 php 答案。(获取所有可能的组合而不重复)。
我考虑过某种形式的结果树,但不确定如何用递归来实现。
我的答案(包括重复项)如下:
#include <string>
#include <iostream>
using namespace std;
void get( string str, string res ) {
cout << res << endl;
for( int i = 0; i < str.length(); i++ )
get( string(str).erase(i,1), res + str[i] );
}
int main( int argc, char **argv) {
string str = "123";
get( str, "" );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是一个面试问题,没有重复的问题让我很困惑。预先感谢您的任何帮助。
OP 正在寻找的内容相当于Power Set减去Empty Set。无需递归即可轻松实现所需的输出。这是一个简单的方法:
#include <vector>
#include <string>
#include <cmath>
#include <iostream>
void GetPowerSet(std::string v) {
std::string emptyString;
std::vector<std::string> powerSet;
int n = (int) std::pow(2.0, (double) v.size()); // Get size of power set of v
powerSet.reserve(n);
powerSet.push_back(emptyString); // add empty set
for (std::string::iterator it = v.begin(); it < v.end(); it++) {
unsigned int tempSize = powerSet.size();
for (std::size_t j = 0; j < tempSize; j++)
powerSet.push_back(powerSet[j] + *it);
}
// remove empty set element
powerSet.erase(powerSet.begin());
// print out results
std::cout << "Here is your output : ";
for (std::vector<std::string>::iterator it = powerSet.begin(); it < powerSet.end(); it++)
std::cout << *it << ' ';
}
int main() {
std::string myStr;
std::cout << "Please enter a string : ";
std::cin >> myStr;
GetPowerSet(myStr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是输出:
Please enter a string : 123
Here is your output : 1 2 12 3 13 23 123
Run Code Online (Sandbox Code Playgroud)
我们首先注意到幂集的大小由下式给出:2^n其中n是初始集的大小。出于我们的目的,我们的最终向量将仅包含2^n - 1元素,但是我们仍然需要保留2^n以防止调整大小,因为需要“空”元素来构建我们的结果。
真正的工作是在两者中间进行for loops的GetPowerSet。我们从一个空白元素开始。然后,我们迭代原始向量中的每个字符,一路创建幂集的子集。例如
powerSet = {}v到上面幂集的每个元素中:'' + '1' = '1'。
powerSet = {{}, '1'}v到上面幂集的每个元素中:'' + '2' = '2', '1' + '2' = '12'
powerSet = {{}, '1', '2', '12'}v到上面幂集的每个元素中:'' + '3' = '3', '1' + '3' = '13', '2' + '3' = '23', '12' + '3' = '123'
powerSet = {{}, '1', '2', '12', '3', '13', '23', '123'}powerSet = {'1', '2', '12', '3', '13', '23', '123'}我们就完成了。
| 归档时间: |
|
| 查看次数: |
3583 次 |
| 最近记录: |