有重複元素的全排列
問題來源和描述
問題來源:LeetCode 47題:https://leetcode-cn.com/problems/permutations-ii/
給定一個可包含重複數字的序列,返回所有不重複的全排列。
思路:dfs
import java.util.*;
public class Main {
public static void main(String[] args) {
//輸入需要全排列的數字
Scanner scanner = new Scanner(System.in);
String[] strs = scanner.nextLine().trim().split(" ");
int[] nums = new int[strs.length];
for (int i = 0; i < nums.length; i++) {
nums[i] = Integer.parseInt(strs[i]);
}
//得到全排列的結果
List<List<Integer>> res = permute(nums);
//輸出結果
for (int i = 0; i < res.size(); i++) {
System.out.println(res.get(i).toString());
}
}
public static List<List<Integer>> permute(int[] nums) {
Arrays.sort(nums);
boolean[] vis = new boolean[nums.length];
List<List<Integer>> res = new ArrayList<>();
List<Integer> temp = new ArrayList<>();
dfs(nums, res, temp, 0, vis);
return res;
}
private static void dfs(int[] nums, List<List<Integer>> res, List<Integer> temp, int index, boolean[] vis) {
if (index == nums.length) {
res.add(new ArrayList<>(temp));
}
for (int i = 0; i < nums.length; i++) {
if (vis[i] || (i > 0 && nums[i] == nums[i-1] && !vis[i-1])) {
continue;
}
temp.add(nums[i]);
vis[i] = true;
//繼續標記下一個位置
dfs(nums, res, temp, index+1, vis);
//回溯
vis[i] = false;
temp.remove(index);
}
}
}
相關文章
- JavaScript陣列元素全排列JavaScript陣列
- 無重複字串的排列組合字串
- leetcode 面試題08.08. 有重複字串的排列組合LeetCode面試題字串
- 存在重複元素
- java陣列中重複元素的去重Java陣列
- 961. 重複 N 次的元素
- 查詢Set中重複的元素
- 220、存在重複元素Ⅲ(中等)
- 關於元素排列的DFS
- 力扣之存在重複元素力扣
- LeetCode 存在重複元素之JavaScriptLeetCodeJavaScript
- 如何去除有序陣列中的重複元素陣列
- JavaScript 刪除陣列重複元素JavaScript陣列
- Remove Duplicate Letters 刪除重複元素REM
- LeetCode26、27 刪重複元素LeetCode
- JavaScript陣列刪除重複元素JavaScript陣列
- 字串全排列字串
- 小測試:HashSet可以插入重複的元素嗎?
- 計蒜客 移除陣列中的重複元素陣列
- ES6刪除字串中重複的元素字串
- PHP陣列去除空白或重複元素PHP陣列
- python——集合set不存在重複元素Python
- VUE-多元素垂直排列,有一列自動填充Vue
- Java基礎之去除List集合中的重複元素Java
- LeetCode每日一題:重複 N 次的元素(No.961)LeetCode每日一題
- Java stream判斷列表是否包含某幾個元素/重複元素Java
- 浮動流元素排列規則
- 演算法——全排列演算法
- LeetCode-046-全排列LeetCode
- LeetCode系列46—全排列LeetCode
- 全排列演算法演算法
- 【LeetCode】46. 全排列LeetCode
- Leetcode——46. 全排列LeetCode
- leetcode:全排列(java回溯)LeetCodeJava
- dataset 判斷整列是否有重複,找出重複資料
- 【leetcode】60. Permutation Sequence 全排列的第k位序的排列形式LeetCode
- Day 28 | 491.遞增子序列 、46.全排列、 47.全排列 II
- sample, choices: 從list中隨機選擇無重複的元素隨機