当前位置: 代码迷 >> 综合 >> 47. 全排列 II
  详细解决方案

47. 全排列 II

热度:49   发布时间:2024-01-31 01:35:55.0

 

难度中等352收藏分享切换为英文关注反馈

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

示例:

输入: [1,1,2]
输出:
[[1,1,2],[1,2,1],[2,1,1]
]

解题思路:记忆回溯

class Solution {List<List<Integer>> list;public List<List<Integer>> permuteUnique(int[] nums) {list = new ArrayList<List<Integer>>();if(nums == null || nums.length <= 0) return list;Arrays.sort(nums);help(nums,new boolean[nums.length],new ArrayList<Integer>());return list;}private void help(int nums[], boolean[] type , ArrayList<Integer> newlist ){if(newlist.size() == nums.length){list.add(new ArrayList<>(newlist));return;}for(int i = 0 ; i< nums.length ;i++){if(type[i] ) continue;if(i>0 && nums[i-1] == nums[i] && type[i-1]) continue;type[i]= true;newlist.add(nums[i]);help(nums,type,newlist);type[i] = false;newlist.remove(newlist.size()-1);}}}

 

  相关解决方案