博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
力扣(LeetCode)47
阅读量:6081 次
发布时间:2019-06-20

本文共 1100 字,大约阅读时间需要 3 分钟。

题目地址:

题目描述:
给定一个可包含重复数字的序列,返回所有不重复的全排列。

示例:

输入: [1,1,2]

输出:
[
[1,1,2],
[1,2,1],
[2,1,1]
]
解答:
这一题可以利用求下一个排列算法来求解,对原数组排序,然后加入一个结果,接着不断求下一个排列,直到没有下一个排列为止。而下一个排列的求解,可以参考

java ac代码:

class Solution {    public List
> permuteUnique(int[] nums) { List
>ans = new ArrayList(1000); Arrays.sort(nums); List
temp = new ArrayList(); for(int i = 0;i < nums.length;i++) temp.add(nums[i]); ans.add(temp); while(true) { temp = nextpermute(nums); if(temp.size() > 0) ans.add(temp); else break; } return ans; } List
nextpermute(int[]nums) { List
ans = new ArrayList(nums.length); for(int i = 0;i < nums.length-1;i++) if(nums[i]
nums[j-1]) { swap(nums,j-1,k); int l = j,r = nums.length-1; while(l < r) { swap(nums,l,r); l++; r--; } for(int q = 0;q < nums.length;q++) ans.add(nums[q]); break; } k--; } break; } return ans; } void swap(int[]nums,int i,int j) { int temp = nums[i]; nums[i] = nums[j]; nums[j] = temp; }}

转载地址:http://arhgx.baihongyu.com/

你可能感兴趣的文章
在ARC中使用weak报错和文件目录找不到的解决方法
查看>>
linux nc命令使用详解
查看>>
支持网络文件断点续传的实现
查看>>
编程珠玑---读书笔记---使用后缀数组查找最长重复子串
查看>>
Ant之build.xml详解
查看>>
Flex 舞台背景渐变
查看>>
会计基础第二次模拟题(4)
查看>>
Ubuntu 问题解决汇总
查看>>
曾良 - 百度百科
查看>>
06 管理者意味着什么
查看>>
android权限大全
查看>>
微软必应借PK谷歌突围中国搜索市场
查看>>
刚子微信扯扯葱蒜
查看>>
[深入浅出Cocoa]iOS网络编程之NSStream
查看>>
HDOJ 4607 - Park Visit
查看>>
关于PHP 缓冲区
查看>>
分布式EventBus的Socket实现 - 发布订阅
查看>>
unity动态加载(翻译) .
查看>>
WIP_DISCRETE_JOBS.STATUS_TYPE
查看>>
一 VC2008环境中ICE的配置
查看>>