leetcode:全排列II(java回溯)
阿新 • • 發佈:2018-12-13
package LeetCode; import java.util.ArrayList; import java.util.List; /* 給定一個可包含重複數字的序列,返回所有不重複的全排列。 示例: 輸入: [1,1,2] 輸出: [ [1,1,2], [1,2,1], [2,1,1] ] */ public class HS_PermuteII { public List<List<Integer>> permuteUnique(int[] nums) { List<List<Integer>> result = new ArrayList<>(); List<Integer> l = new ArrayList<>(); List<Integer> is = new ArrayList<>(); huisu(is,nums, l, result); return result; } public void huisu(List<Integer> is ,int[] nums, List<Integer> l, List<List<Integer>> result) { if (l.size() == nums.length&&!result.contains(l)) { //指向新的一片地址空間使其變成不在跟隨l改變而改變 result.add(new ArrayList<Integer>(l)); return; } else { for (int i = 0; i < nums.length; i++) { if (is.contains(i))continue; l.add(nums[i]); is.add(i); huisu(is,nums, l, result); //退回一格 l.remove(l.size() - 1); is.remove(is.size()-1); } } } }