位置: IT常识 - 正文
推荐整理分享回溯法实现全排序Ⅰ(回溯法实现全排序的方法),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:回溯法可以使用什么方法实现,回溯法全排列时间复杂度,回溯法实现全排序的方法,回溯法怎么实现,回溯法全排列时间复杂度,回溯法求全排列,回溯法实现全排序的方法,回溯算法全排列,内容如对您有帮助,希望把文章链接给更多的朋友!
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]存放于数组A的n个元素,生成其排列:
第一个元素不动,生成后面n-1个元素的排列;第一、第二个元素互换,生成后面n-1个元素的排列;最后,第一个、第n个元素互换,生成后面n-1个元素的排列为生成后面n-1个元素的排列,继续采取下面的步骤:
第二个元素不动,生成后面n-2个元素的排列;第二、第三个元素互换,生成后面n-2个元素的排列;最后,第二个、第n个元素互换,生成后面n-2个元素的排列;当排列的前n-2个元素已确定后,为生成后面2个元素的排列,可以:
第n-1个元素不动,生成后面1个元素的排列,此时,n个元素已构成排列;
第n-1、第n个元素互换,生成后面1个元素的排列,此时,n个元素已构成排列;
Java代码class Solution { public List<List<Integer>> permute(int[] nums) { List<List<Integer>> res = new ArrayList<List<Integer>>(); List<Integer> output = new ArrayList<Integer>(); for (int num : nums) { output.add(num); } int n = nums.length; backtrack(n, output, res, 0); return res; } public void backtrack(int n, List<Integer> output, List<List<Integer>> res, int first) { // 所有数都填完了 if (first == n) { res.add(new ArrayList<Integer>(output)); } for (int i = first; i < n; i++) { // 动态维护数组 Collections.swap(output, first, i); // 继续递归填下一个数 backtrack(n, output, res, first + 1); // 撤销操作 Collections.swap(output, first, i); } }}注:
(1)以下是java.util.Collections.swap()方法的
上一篇:注册有赞微小店教程,用于织梦个人支付(有赞微小店认证麻烦)
下一篇:修改织梦CMS默认模板中的颜色字体(织梦cms为什么不维护了)
友情链接: 武汉网站建设