全排列的两种写法 2021-02-17

简介: 全排列的两种写法 2021-02-17

输出1、2、3、4、5五个数中任选三个数的全排列,其中不允许有重复的组合形式。

1. // C 写法
2. #include <iostream>
3. using namespace std;
4. int a[10],book[10],n;
5. void dfs(int step,int t){
6.  if(step==t+1){
7.    for(int i=1;i<=t;i++)
8.      cout<<a[i]<<" ";
9.    cout<<endl;
10.     return;
11.   }
12.   for(int i=1;i<=n;i++){
13.     if(book[i]==0&&i>a[step-1]){
14.       a[step]=i;
15.       book[i]=1;
16.       dfs(step+1,t);
17.       book[i]=0;
18.     }
19.   }
20.   return;
21. }
22. int main(int argc, char *argv[])
23. {
24.   n=5;
25.   dfs(1,3);
26.   return 0;
27. }
1. // C++ 写法
2. #include <iostream>
3. #include <vector>
4. #include <algorithm>
5. using namespace std;
6. vector<vector<int> > res;
7. void backtrack(vector<int> &nums,vector<int> &track)
8. {
9.  if(3==track.size())
10.   {
11.     res.push_back(track);
12.     return;
13.   }
14.   for(vector<int>::iterator it=nums.begin();it!=nums.end();it++)
15.   {
16.     if(std::count(track.begin(),track.end(),*it) || (track.size()>0 && *it<track.back()))
17.       continue;
18.     track.push_back(*it);
19.     backtrack(nums,track);
20.     track.pop_back();
21.   }
22. }
23. void dfs(vector<int> nums)
24. {
25.   vector<int> track;
26.   res.clear();
27.   backtrack(nums,track);
28. }
29. int main(int argc, char *argv[])
30. {
31.   int a[]={1,2,3,4,5};
32.   vector<int> nums(a,a+sizeof(a)/sizeof(a[0]));
33.   dfs(nums);
34.   for(int i=0;i<res.size();i++)
35.   {
36.     for(vector<int>::iterator it=res[i].begin();it!=res[i].end();it++)
37.       cout<<*it<<" ";
38.     cout<<endl;
39.   }
40.   cout<<res.size()<<endl;
41.   return 0;
42. }
相关文章
|
9月前
斐波那契数列的几种写法 2021-02-23
斐波那契数列的几种写法 2021-02-23
|
9月前
|
C语言 容器
互换函数和反转字符串
互换函数和反转字符串
|
10月前
字符串的逆序(循环和递归两种解法)
字符串的逆序(循环和递归两种解法)
89 0
|
测试技术 C语言
C语言题解 | 移除元素(多种解法)
这是力扣上的一道简单题,需求是 移除数组中的指定元素,并且要求 空间复杂度为O(1) ,即原地移除,我们可以用顺序表中的任意位置删除的思想解决这个题,符合题目要求,当然还有其他解法。
50137 1
C语言题解 | 移除元素(多种解法)
|
存储
【C】逆序字符串(俩种递归思路)
【C】逆序字符串(俩种递归思路)
63 0
【C】逆序字符串(俩种递归思路)
【递归与递推 1】AcWing94.递归实现排列型枚举
【递归与递推 1】AcWing94.递归实现排列型枚举
|
JavaScript 前端开发 C#
每日一算:找出数组中的第一个回文字符串使用JavaScript解题
每日一算:找出数组中的第一个回文字符串使用JavaScript解题
75 0
|
JavaScript 前端开发 Shell
JavaScript题解剑指offer : 03. 数组中重复的数字
JavaScript题解剑指offer : 03. 数组中重复的数字
116 0
|
算法
【Day24】 LeetCode算法题 (注释详细+解题思路)[43. 字符串相乘 ] [1800. 最大升序子数组和]
学习 (注释详细+解题思路)[43. 字符串相乘 ] [1800. 最大升序子数组和]。
112 0
【Day24】 LeetCode算法题 (注释详细+解题思路)[43. 字符串相乘 ] [1800. 最大升序子数组和]
|
算法 JavaScript 前端开发
167. 两数之和 II - 输入有序数组:JavaScript 双指针解法
167. 两数之和 II - 输入有序数组:JavaScript 双指针解法
90 0
167. 两数之和 II - 输入有序数组:JavaScript 双指针解法