有重複元素的全排列
問題來源和描述
問題來源: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陣列
- 字串的全排列字串
- 查詢Set中重複的元素
- 961. 重複 N 次的元素
- 使用HashSet<>去除重複元素的集合
- [演算法] 固定的元素在固定長度上進行全排列演算法
- 關於元素排列的DFS
- Java實現-帶重複元素的子集Java
- 如何刪除ArrayList中的重複元素
- 力扣之存在重複元素力扣
- js刪除陣列中重複的元素JS陣列
- js刪除陣列中的重複元素JS陣列
- JavaScript 刪除陣列重複元素JavaScript陣列
- 220、存在重複元素Ⅲ(中等)
- Remove Duplicate Letters 刪除重複元素REM
- JavaScript陣列刪除重複元素JavaScript陣列
- 計蒜客 移除陣列中的重複元素陣列
- 小測試:HashSet可以插入重複的元素嗎?
- ES6刪除字串中重複的元素字串
- 在陣列中找出唯一的重複元素陣列
- VUE-多元素垂直排列,有一列自動填充Vue
- 全排列演算法演算法
- Java實現-全排列Java
- PHP陣列去除空白或重複元素PHP陣列
- LeetCode 存在重複元素之JavaScriptLeetCodeJavaScript
- 你的程式碼有重複嗎?
- dataset 判斷整列是否有重複,找出重複資料
- Java基礎之去除List集合中的重複元素Java
- js 的陣列去除重複元素程式碼例項JS陣列
- javascript刪除陣列中的重複元素程式碼JavaScript陣列
- 實現自然數N的全排列
- Java刪除ArrayList中的重複元素的2種方法Java
- Java stream判斷列表是否包含某幾個元素/重複元素Java