zoukankan      html  css  js  c++  java
  • Permutations of Array

    Given a collection of numbers, return all possible permutations.

    For example,
    [1,2,3] have the following permutations:
    [1,2,3][1,3,2][2,1,3][2,3,1][3,1,2], and [3,2,1].

    Thoughts:

    You take first element of an array (k=0) and exchange it with any element (i) of the array. Then you recursively apply permutation on array starting with second element. This way you get all permutations starting with i-th element. The tricky part is that after recursive call you must swap i-th element with first element back, otherwise you could get repeated values at the first spot. By swapping it back we restore order of elements (basically you do backtracking).

    Code:

     public List<List<Integer>> permute(int[] nums) {
            List<List<Integer>> lists = new ArrayList<List<Integer>>();
            p(nums,0,lists);
            return lists;
        }
        public void p(int[] nums, int k,List<List<Integer>> lists){
            if(k>=nums.length){
                List<Integer> current = new ArrayList<Integer>();
                for (int a : nums) {
                    current.add(a);
                }
                lists.add(current);
            }
            else{
            for(int i=k;i<nums.length;i++){
                swap(nums, i, k);
                p(nums,k+1,lists);
                swap(nums,i,k); // BackTracking
            }
            }
            
        }
        
        public void swap (int[] arr, int m, int n){
            int temp = arr[m];
            arr[m]=arr[n];
            arr[n]=temp;
        }
  • 相关阅读:
    直接拿来用 九个超实用的PHP代码片段(二)
    微信开发值得推荐的开源项目
    PHP文件下载原理
    简化PHP开发的10个工具
    CI Weekly #1 | 这份周刊,带你了解 CI/CD 、DevOps、自动化测试
    fir.im Weekly
    fir.im Weekly
    fir.im Weekly
    用 flow.ci 让 Hexo 持续部署
    fir.im Weekly
  • 原文地址:https://www.cnblogs.com/midan/p/4703653.html
Copyright © 2011-2022 走看看