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 }
不经历风雨,怎么见彩虹!