[LeetCode][JavaScript]Permutations II
2015-12-01 16:08
741 查看
Permutations II
Given a collection of numbers that might contain duplicates, return all possible unique permutations.For example,
[1,1,2]have the following unique permutations:
[1,1,2],
[1,2,1], and
[2,1,1].
https://leetcode.com/problems/permutations-ii/
全排列,入参数组中的数字可能有重复。
第一种做法是接着Permutations,开一个哈希表记录出现过的组合。
/article/7171063.html
/** * @param {number[]} nums * @return {number[][]} */ var permuteUnique2 = function(nums) { var result = [], visited = {}; getPermute(0); return result; function getPermute(index){ if(index === nums.length){ var id = nums.join('#'); if(!visited[id]){ result.push(nums.slice(0)); visited[id] = true; } return; } for(var i = index; i < nums.length; i++){ switchNum(i, index); getPermute(index + 1); switchNum(i, index); } } function switchNum(i, j){ if(i === j) return; var tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } };
第二种做法是接着Next Permutation,不断求下一个排列直到重复为止。
/article/7171067.html
/** * @param {number[]} nums * @return {number[][]} */ var permuteUnique = function(nums) { var res = [nums.slice(0)], numsJSON = JSON.stringify(nums); while(true){ nextPermutation(nums); if(numsJSON !== JSON.stringify(nums)){ res.push(nums.slice(0)); }else{ break; } } return res; function nextPermutation(nums) { for(var i = nums.length - 1; i > 0 && nums[i] <= nums[i - 1]; i--); if(i === 0){ reverse(0, nums.length - 1); return; } for(var j = i + 1; j < nums.length && nums[i - 1] < nums[j]; j++); swap(i - 1, j - 1); reverse(i, nums.length - 1); return; function reverse(start, end){ while(start < end){ swap(start, end); start++; end--; } } function swap(i, j){ var tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } } };
相关文章推荐
- JavaScript 将方法名作为参数传递、调用。(被传递方法带参数)
- javascript下ie7,ie8的Date Bug的解决
- JavaScript基础——DOM2和DOM3
- <html5+css3+js>文档对象模型,对元素的各种操作
- [LeetCode][JavaScript]Next Permutation
- JS模拟百度音乐-全选操作
- js之全局与局部坑
- domino纯前台分页功能实现
- 【Hours】使用indexedDB中遇到的问题。
- JsonP跨域问题研究
- js倒计时
- 图解JSP与Servlet的关系
- VS快速生成JSON数据格式对应的实体
- js实现继承的5种方式
- seajs使用教程指南
- javascript Date format(js日期格式化)
- AngulaJs+Web Api Cors 跨域访问失败的解决办法
- js毫秒数转换成时间格式
- javascript函数声明与函数表达式的区别:函数声明提升
- 补全Gemfile缺少到javascript gem