【发布时间】:2018-09-03 06:52:02
【问题描述】:
在 c++ 中给出一个字符串的所有可能组合,不重复。 示例输入:“123”,输出组合为:
1,12,123,13,2,23,3.
重复的示例是“12”=="21" 或“123”=="213"。
假设一个字符不会被多次使用。另外我不认为递归是强制性的。
这里有一个 php 答案。(Get all possible combinations without duplicates)。
我曾考虑过某种形式的结果树,但不确定如何使用递归实现。
我的答案包括重复如下:
#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;
}
这是一个面试问题,没有重复的问题让我感到震惊。提前感谢您的帮助。
【问题讨论】:
-
输入是否不应该包含两次相同的字符? (例如“aab”,您是否认为这不会发生,您是否必须检测它并发出错误信号,您是否输出“a,b,ab,aa,aab”?)
-
@JesperJuhl 我认为这不是他想要的。他不想要排列,他想要所有可能的字符串,可以通过从原始字符串中删除字母来获得。
-
@Caninonos,我认为假设同一个字符不会被使用两次更容易。
-
那么有这个有点幼稚的解决方案:ideone.com/m2UX2u
标签: c++ recursion combinations