码迷,mamicode.com
首页 > 其他好文 > 详细

IT公司100题-1-二叉树转换为双链表

时间:2014-08-18 17:56:32      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   strong   for   问题   

问题描述:
输入两个整数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     // 不选cur
20     helper(m, cur + 1, aux, n);
21 
22     // 选cur
23     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,表示选择i
33     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.exe
input n and m:
6 3
1 2
0 1 2
3
1 2
0 3
0 1 2

 

 

IT公司100题-1-二叉树转换为双链表,布布扣,bubuko.com

IT公司100题-1-二叉树转换为双链表

标签:style   blog   color   os   io   strong   for   问题   

原文地址:http://www.cnblogs.com/dracohan/p/3919901.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!