[LeetCode] Permutations 解题报告

递归生成所有排列算法详解
本文详细介绍了如何使用递归方法生成一组数字的所有排列,并提供了C/C++代码实现。通过标志位记录已使用数字,确保生成不重复的排列组合。

Given a collection of numbers, return all possible permutations.
For example,
[1,2,3] have the following permutations:
[1,2,3][1,3,2][2,1,3][2,3,1][3,1,2], and  [3,2,1].

» Solve this problem

[解题思路]
递归,用标志位记录已使用数字。

[Code]

1:    vector<vector<int> > permute(vector<int> &num) {  
2: // Start typing your C/C++ solution below
3: // DO NOT write int main() function
4: vector<vector<int> > coll;
5: vector<int> solution;
6: if(num.size() ==0) return coll;
7: vector<int> visited(num.size(), 0);
8: GeneratePermute(num, 0, visited, solution, coll);
9: return coll;
10: }
11: void GeneratePermute(vector<int> & num, int step, vector<int>& visited, vector<int>& solution, vector<vector<int> >& coll)
12: {
13: if(step == num.size())
14: {
15: coll.push_back(solution);
16: return;
17: }
18: for(int i =0; i< num.size(); i++)
19: {
20: if(visited[i] == 0)
21: {
22: visited[i] = 1;
23: solution.push_back(num[i]);
24: GeneratePermute(num, step+1, visited, solution, coll);
25: solution.pop_back();
26: visited[i] =0;
27: }
28: }
29: }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值