解题思路:
递归思想,创建一个长度为n的数组,来存是否取当前的数,1代表取,2代表不取,先取,然后判断下一个数,直到大于n为止,输出为值1的索引,然后往上回溯,值重新赋值为0。
下面是c++代码:
#include<iostream>
using namespace std;
int n;
int* arr = new int[10000] {0};
int main()
{
void dfs(int);
cin >> n;
dfs(1);
}
void dfs(int x) {
if (x > n) {
for (int i = 1; i <= n; i++) {
if (arr[i] == 1) {
cout << i << " ";
}
}
cout << endl;
return;
}
arr[x] = 2;
dfs(x + 1);
arr[x] = 0;
arr[x] = 1;
dfs(x + 1);
arr[x] = 0;
}