乐趣区

关于前端:回溯算法全排列

“ 全排列 ” 是数学中的一个概念,指的是从给定汇合中取出所有元素的所有排列形式。在这个问题中,咱们须要实现一个办法,该办法可能生成数字 1、2 和 3 的所有全排列。

以下是一个简略的 Java 实现:

    import java.util.*;  

    public class Main {public static void main(String[] args) {int[] nums = {1, 2, 3};  

            List<List<Integer>> permute = permute(nums);  

            for (List<Integer> integers : permute) {System.out.println(integers);  

            }  

        }  

      

        public static List<List<Integer>> permute(int[] nums) {List<List<Integer>> output = new ArrayList<>();  

            ArrayList<Integer> nums_list = new ArrayList<Integer>();  

            for (int num : nums) {nums_list.add(num);  

            }  

            int n = nums.length;  

            backtrack(n, nums_list, output, 0);  

            return output;  

        }  

      

        public static void backtrack(int n, ArrayList<Integer> nums, List<List<Integer>> output, int first) {if (first == n) {output.add(new ArrayList<Integer>(nums));  

            }  

            for (int i = first; i < n; i++) {Collections.swap(nums, first, i);  

                backtrack(n, nums, output, first + 1);  

                Collections.swap(nums, first, i);  

            }  

        }  

    }

这个程序首先创立一个蕴含 1、2 和 3 的数组,而后通过 permute 办法计算全排列。permute办法应用回溯算法来生成所有可能的排列,每次递归地替换数组中的两个元素,直到所有的元素都被替换过。最初,将生成的排列增加到后果列表中。

退出移动版