II 자바를 통해 알고리즘 노트 (40) 조합 합

클래스 솔루션 {
     // 빌드 솔루션 세트로 되돌아을 사용하여;
    // 후보리스트를 통해 이송하고 용액 구축 시점으로해서 각 요소를 사용하려고 
공개 목록 <일람 <정수 >> combinationSum2 ( INT [] 후보 INT 대상) { 목록 <일람 <정수 >> 입술 = > <되는 ArrayList (); // 솔루션 세트,있는있는 목록 <정수> 빌드는 = 새로운 ArrayList를을 <> (); // 부분 용액 Arrays.sort에 (후보); 도우미 (후보, 0 , 빌드, 고해상도, 대상); 반환 입술을; } 개인 공극 도우미 ( INT [] 후보 INT IDX 목록 <정수> 빌드 목록 <일람 <정수 >> 입술, INT 대상) { 경우 (목표 == 0 ) { 에서 <정수> = TOADD 새로운 ArrayList를 <> (짓다); res.add (TOADD); 반환 ; } ( INT I = IDX; I <candidates.length; I ++ ) { 경우 (후보 [I] <= 목표) { build.add (후보 [I]); 헬퍼 (후보 I +1, 빌드, 입술, target- 후보 [I]); build.remove (build.size () -1 ); } 동안 (ⅰ <candidates.length 1 && 후보 [I] == 후보 [I + 1 ]) { I ++ ; } } } }

시간 복잡도 분석 : 정렬 O (nlgn) + N 층 재귀 각 노드 최악 O (N) 통과를 들면, 형상이 재귀 트리 균형되지 않고, 분석하지 매우 좋은 약 O (2 ^ N ) 기준 분석 : HTTPS : //www.1point3acres.com/bbs/thread-117602-1-1.html

공간 복잡도 : O (높이) = O (N)의 부분은 공간 복잡도를 저장에 대한 응답이 O (그래서 재귀 공간적 트리로, 모든 노드 및 추가 공간의 각 노드는 사용되지 N) (불확실성) 전체) O (n은

추천

출처www.cnblogs.com/zg1005/p/11876390.html