算法分析与设计——LeetCode:46. Permutations
2018-01-09 13:43
555 查看
题目
Given a collection of distinct 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],
[3,2,1]
]class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
}
};
思路
这道题其实就是一道简单的排列组合题,按照中学时的解法就是An种情况,每个新的数列第一位可以在n个数取一个,第二位在n-1个数里取一个,依此类推。而用在计算机上,使用递归应该会比较好理解,具体看下面的代码和注释即可。代码
class Solution { public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> result; int size = nums.size(); vector<int> temp;//新数列 permute(result, temp, 0, nums, size); return result; } void permute(vector<vector<int>>& result, vector<int> temp, int tempLength, vector<int> nums, int size) { if (tempLength >= size) { result.push_back(temp); return; } else { for (int i = 0; i < size; i++) {//在nums里找出每个temp里还未用过的数 int j; for (j = 0; j < tempLength; j++) { if (nums[i] == temp[j]) { break; } } if (j == tempLength) { temp.push_back(nums[i]); permute(result, temp, tempLength+1, nums, size); temp.pop_back(); } } } } };
相关文章推荐
- 算法分析与设计——LeetCode Problem.16 3Sum Closest
- 算法分析与设计课程——LeetCode刷题之Search for a Range
- [算法分析与设计] leetcode 每周一题: 215. Kth Largest Element in an Array
- 算法分析与设计——LeetCode Problem.63 Unique Paths II
- 算法分析与设计丨第一周丨LeetCode(2)——Different Ways to Add Parentheses(Medium)
- 算法设计与分析 HW6:LeetCode 54
- 算法分析与设计课程(15):【leetcode】 Find Minimum in Rotated Sorted Array
- 算法分析与设计——LeetCode:39. Combination Sum
- [算法分析与设计] leetcode 每周一题: 070. Climbing Stairs
- 算法分析与设计课程(3):【leetcode】Permutations
- 算法分析与设计——LeetCode:101. Symmetric Tree
- 算法分析与设计课程——LeetCode刷题之 Merge k Sorted Lists
- 算法分析与设计——LeetCode Problem.2 Add Two Numbers
- 算法分析与设计——LeetCode Problem.258 Add Digits
- [算法分析与设计] leetcode 每周一题: 126. Word Ladder II
- 算法分析与设计——LeetCode Problem.35 Search Insert Position
- 算法分析与设计课程——LeetCode刷题之3Sum
- [算法分析与设计] leetcode 每周一题: Minimum Time Difference
- 算法分析与设计课程(14):【leetcode】 Maximal Square
- 算法分析与设计——LeetCode Problem.22 Generate Parentheses