leetcode系列(55)Permutations, Permutations II
来源:互联网 发布:mac 菜单栏的锁不见了 编辑:程序博客网 时间:2024/05/21 09:12
Given acollection of numbers, return all possible permutations.
Forexample,
[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].
解答:这两个题目的区别就是区分重复元素,第二题的解法也是适用于第一题的,所以这里给出第一题的代码(swap+递归实现排列);如果用python会遇到一个坑就是pytho的list append时deafult不会深度拷贝,所以ret.append(nums)不会AC,需要ret.append(nums[:]),看下面例子:
>>>a = '1'>>>print id(a)3075358016>>>l = []>>>l.append(a)>>>print id(l[0])3075358016>>>print l['1']>>>b = [1,2]>>>print id(b)3072493388>>>l.append(b)>>>print id(l[1])3072493388 >>>l = [1,2]>>>c = [1,2,3]>>>>>>c = [1,2]>>>print id(c)3072833388>>>l.append(c)>>>print id(l[2])3072833388>>>l.append(c[:])>>>print id(l[3])3075373068
Permutation
class Solution {public: vector<vector<int>> permute(vector<int>& nums) { vector<vector<int>> ret; permute(ret, nums, 0); return ret; } private: void permute(vector<vector<int>>& ret, vector<int>& nums, size_t start) { if (start == nums.size()) { ret.push_back(nums); } else { for (size_t i = start; i < nums.size(); ++i) { // ignore the item that already exist in nums[start, i) when i > start if (i > start && find(nums.begin() + start, nums.begin() + i, nums[i]) != (nums.begin() + i)) { continue; } swap(nums[start], nums[i]); permute(ret, nums, start + 1); swap(nums[start], nums[i]); } } }};
class Solution(object): def permute(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ ret = [] self._permute(ret, nums, 0) return ret def _permute(self, ret, nums, start): if start == len(nums): # don't append nums directly, append nums[:] insteand to force deep copy ret.append(nums[:]) else: for i in range(start, len(nums)): nums[start], nums[i] = nums[i], nums[start] self._permute(ret, nums, start + 1) nums[start], nums[i] = nums[i], nums[start]
Permutation II
class Solution {public: vector<vector<int>> permuteUnique(vector<int>& nums) { vector<vector<int>> ret; permute(ret, nums, 0); return ret; } private: void permute(vector<vector<int>>& ret, vector<int>& nums, size_t start) { if (start == nums.size()) { ret.push_back(nums); } for (size_t i = start; i < nums.size(); ++i) { // ignore the item that already exist in nums[start, i) when i > start if (i > start && find(nums.begin() + start, nums.begin() + i, nums[i]) != (nums.begin() + i)) { continue; } swap(nums[start], nums[i]); permute(ret, nums, start + 1); swap(nums[start], nums[i]); } }};
class Solution(object): def permuteUnique(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ ret = [] self._permute(ret, nums, 0) return ret def _permute(self, ret, nums, start): if start == len(nums): # don't append nums directly, append nums[:] insteand to force deep copy ret.append(nums[:]) else: for i in range(start, len(nums)): if i > start and nums[i] in nums[start:i]: continue nums[start], nums[i] = nums[i], nums[start] self._permute(ret, nums, start + 1) nums[start], nums[i] = nums[i], nums[start]
0 0
- leetcode系列(55)Permutations, Permutations II
- 【LeetCode】Permutations && Permutations II
- leetcode: Permutations/Permutations II
- leetcode Permutations & Permutations II
- [Leetcode]Permutations && Permutations II
- Leetcode: Permutations and Permutations II
- leetcode-permutations and permutations II
- Leetcode:Permutations与Permutations II
- LeetCode(47)Permutations II
- [leetcode刷题系列]Permutations II
- LeetCode 46 Permutations + LeetCode 47 Permutations II
- LeetCode: Permutations II
- LeetCode Permutations II
- LeetCode: Permutations II
- [Leetcode] Permutations II
- [LeetCode] Permutations II
- [Leetcode] Permutations II
- leetcode Permutations II
- Hibernate中继承关系映射二
- 十一月英语总结
- Java源码 SpringMVC Mybatis Shiro Bootstrap Rest Webservice
- nyoj 整数划分 90 (母函数)
- maven的依赖传递(二)
- leetcode系列(55)Permutations, Permutations II
- 蓝懿ios 技术内容交流和心得分享10.31
- jdk1.6的垃圾回收器
- 函数调用
- spring jpa扫描不同jar包下的类
- Ehcache基础学习
- IBatis和Hibernate区别
- Java实现杨辉三角
- 结构型模式有哪些分别有哪些特点