排列,含重复元素和不重复元素两种情况的实现
来源:互联网 发布:链家端口费是每个月吗? 编辑:程序博客网 时间:2024/04/29 16:56
用的典型的回溯法:
public List<List<Integer>> permute(int[] nums) { List<List<Integer>> result = new ArrayList<>(); permute(result, nums, 0); return result; } private void permute(List<List<Integer>> result, int[] nums, int idx) { if (idx == nums.length) { ArrayList<Integer> arrayList = new ArrayList<>(); for (int num : nums) { arrayList.add(num); } result.add(arrayList); } for (int i = idx; i < nums.length; i++) { swap(nums, idx, i); permute(result, nums, idx + 1); swap(nums, idx, i); } } private void swap(int[] nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } public List<List<Integer>> permuteUnique(int[] nums) { List<List<Integer>> result = new ArrayList<>(); permuteUnique(result, nums, 0); return result; } private void permuteUnique(List<List<Integer>> result, int[] nums, int idx) { if (idx == nums.length) { ArrayList<Integer> arrayList = new ArrayList<>(); for (int num : nums) { arrayList.add(num); } result.add(arrayList); } for (int i = idx; i < nums.length; i++) { if (!isDuplicate(nums, idx, i)) { swap(nums, idx, i); permuteUnique(result, nums, idx + 1); swap(nums, idx, i); } } } private boolean isDuplicate(int[] nums, int idx, int i) { for (int i1 = idx; i1 < i; i1++) { if (nums[i1] == nums[i]) { return true; } } return false; }
0 0
- 排列,含重复元素和不重复元素两种情况的实现
- 含重复元素的全排列
- 含重复元素序列的全排列
- 含重复元素的全排列
- 含重复元素的排列问题
- lintcode---子集(带重复元素和不带重复元素的两种解法)
- 全排列算法:不含重复元素,包含重复元素,字母序排列
- 面试题------全排列的非递归和递归实现(含重复元素)
- 如何得到有重复元素的不重复全排列
- Java实现-带有重复元素的排列
- 带重复元素的排列
- 带重复元素的排列
- 带重复元素的排列
- Java去除数组中重复元素的两种实现
- Java记录 -56- 详解HashSet不含重复元素的实现
- 重复元素全排列
- 带重复元素排列
- 全排列的简单递归方法(有重复元素和无重复元素的递归算法)
- 虚拟机与主机共享文件夹步骤
- 高效的显示bitmap
- HDU1175 连连看(bfs)
- leetcode---Decode Ways---动规
- Fraction to Recurring Decimal
- 排列,含重复元素和不重复元素两种情况的实现
- 利用反射来设计BaseDao
- SAP GUI730 PATCH15 下载
- centos 卸载mysql/mariadb
- 常用shell命令操纵技巧
- SpringBoot学习笔记(3) Spring Boot 运行原理,自动配置
- poj3061(尺取法)
- Spring面试题
- Div里CSS控制图片按比例扩大缩小不变形