首页 > 代码库 > IT公司100题-1-二叉树转换为双链表
IT公司100题-1-二叉树转换为双链表
问题描述:
输入两个整数n 和m,从数列1,2,3,…,n 中随意取几个数, 使其和等于m,将所有可能的组合都打印出来。
分析:
利用递归的思路,对于1,2,3,…,n 中的任意一个数,要么选,要么不选。递归下去,直到其和等于m时,输出。
解答:
1 // 21.cc 2 #include <iostream> 3 #include <cstring> 4 using namespace std; 5 6 void print(int* aux, int n) { 7 for (int i = 0; i < n; i++) 8 if (aux[i]) 9 cout << i << " ";10 cout << endl;11 }12 13 void helper(int m, int cur, int* aux, int n) {14 if (m == 0)15 print(aux, n);16 if (m <= 0 || cur == n)17 return;18 19 // 不选cur20 helper(m, cur + 1, aux, n);21 22 // 选cur23 aux[cur] = 1;24 helper(m - cur, cur + 1, aux, n);25 aux[cur] = 0; // 回溯26 }27 28 void find_combi(int n, int m) {29 if (n > m) 30 find_combi(m, m);31 32 int* aux = new int[n]; // aux[i] = 1,表示选择i33 memset(aux, 0, n * sizeof(int));34 helper(m, 0, aux, n);35 }36 37 int main() {38 int n, m;39 cout << "input n and m:" << endl;40 cin >> n >> m;41 find_combi(n, m);42 return 0;43 }
$ ./a.exeinput n and m:6 31 20 1 231 20 30 1 2
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。