Permutation algorithm for array of integers in Java

前端 未结 9 2069
-上瘾入骨i
-上瘾入骨i 2020-11-29 12:56

I have a working example to generate all char permutations in a String as below:

static ArrayList permutations(String s) {
        if (s == nul         


        
9条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-11-29 13:21

    import java.util.ArrayList;
    import java.util.Arrays;
    
    public class Answer {
        static  String arrayToString( E[] arr ) {
            final StringBuffer str = new StringBuffer();
            for ( E e : arr )
                str.append( e.toString() );
            return str.toString();
        }
    
        static  ArrayList permutations(E[] arr) {
            final ArrayList resultList = new ArrayList();
            final int l = arr.length;
            if ( l == 0 ) return resultList;
            if ( l == 1 )
            {
                resultList.add( arr );
                return resultList;
            }
    
            E[] subClone = Arrays.copyOf( arr, l - 1);
            System.arraycopy( arr, 1, subClone, 0, l - 1 );
    
            for ( int i = 0; i < l; ++i ){
                E e = arr[i];
                if ( i > 0 ) subClone[i-1] = arr[0];
                final ArrayList subPermutations = permutations( subClone );
                for ( E[] sc : subPermutations )
                {
                    E[] clone = Arrays.copyOf( arr, l );
                    clone[0] = e;
                    System.arraycopy( sc, 0, clone, 1, l - 1 );
                    resultList.add( clone );
                }
                if ( i > 0 ) subClone[i-1] = e;
            }
            return resultList;
        }
    
        static ArrayList permutations(String arr) {
            final Character[] c = new Character[ arr.length() ];
            for ( int i = 0; i < arr.length(); ++i )
                c[i] = arr.charAt( i );
    
            final ArrayList perms = permutations(c);
            final ArrayList resultList = new ArrayList( perms.size() );
    
            for ( Character[] p : perms )
            {
                resultList.add( arrayToString( p ) );
            }
            return resultList;
        }
    
        public static void main(String[] args) {
            ArrayList str_perms = permutations( "abc" );
            for ( String p : str_perms ) System.out.println( p );
    
            ArrayList int_perms = permutations( new Integer[]{ 1, 2, 3, 4 } );
            for ( Integer[] p : int_perms ) System.out.println( arrayToString( p ) );
    
        }
    }
    

提交回复
热议问题