IGT一道笔试题

1到n连续的n个数 输入m 得出m个有序序列
 比如 输入为n=5 ,m=3 则输出
 543 542 541 532 531 521  432 431 421 321

当前长度为i,每个位上的取之范围为start ~ m - i,可以使用backtracking解决

 

 1 void helper(int n, vector<int>&res, int num, int len)
 2 {
 3      if(len == num)
 4      {
 5             for(int i=0; i < len; ++i)
 6             {
 7                     printf("%d",res[i]);
 8             }
 9             printf("\n");
10      }
11      else
12      {   int end = len - num;
13          for(int i = n; i >= end; --i)
14          {
15                  res.push_back(i);
16                  helper(i-1, res,  num + 1, len);
17                  res.pop_back();
18          }           
19      }
20 }
21 void fun(int n, int m)
22 {
23      vector<int> res;
24      helper(n, res, 0, m);
25 }

 

posted @ 2013-09-27 09:45  hust_枫  阅读(549)  评论(0编辑  收藏  举报