이 예제는 숫자 배열의 모든 순열을 생성합니다. 처리는 첫 번째 숫자에 대한 모든 순열을 생성하고 배열의 나머지 숫자 처리와 결합하여 재귀 적으로 수행됩니다. 목록에 하나의 요소 만 있으면 아무 것도 할 수 없습니다.
import java.util.ArrayList; public class InterviewPermutations { public ArrayList<ArrayList<Integer>> permute(ArrayList<Integer> a) { // 입력 유효성 검사 if( a == null ) throw new IllegalArgumentException( "입력은 null 일 수 없습니다." ); ArrayList<ArrayList<Integer>> toReturn = new ArrayList<ArrayList<Integer>>(); if( a.size() == 1 ){ toReturn.add( new ArrayList<Integer>(a) ); return toReturn; } // 모든 요소를 반복하십시오. for( int i = 0 ; i < a.size(); i++ ){ int current = a.get( i ); ArrayList<Integer> tmp = new ArrayList<Integer>(a); tmp.remove( i ); // 서브 세트로 재귀 적으로 호출 ArrayList<ArrayList<Integer>> res = permute(tmp); // 반환 된 하위 목록에서 결과 만들기 for( int j = 0 ; j < res.size() ; j++ ){ ArrayList<Integer> toAdd = new ArrayList<Integer>(); toAdd.add( current ); toAdd.addAll( res.get( j ) ); toReturn.add( toAdd ); } } // 결과를 돌려 보내라. return toReturn; } public static void main(String[] argv) throws Exception { InterviewPermutations t = new InterviewPermutations(); ArrayList<Integer> a = new ArrayList<Integer>(); a.add( 1 ); a.add( 2 ); a.add( 3 ); System.out.println( "시작 배열 :" ); System.out.println( a ); ArrayList<ArrayList<Integer>> res = t.permute(a); System.out.println( "결과:" ); for(ArrayList<Integer> c : res ){ System.out.println( c ); } } }
시작 배열 : [1, 2, 3] 결과: [1, 2, 3] [1, 3, 2] [2, 1, 3] [2, 3, 1] [3, 1, 2] [3, 2, 1]
이 예제에는 3 개의 원소가 들어 있고, 순열의 수는 3입니다! 또는 3 * 2 * 1 또는 6.