2014-09-09 3 views
0

Ints의 배열과 원하는 배열 크기가 주어진 경우 myFunction은 가능한 모든 고유 배열의 배열을 반환해야합니다. 초기 배열의 모든 Ints는 고유해야합니다. 모든 배열 구성원을 다른 배열에서 찾을 수 없으면 배열은 고유 한 것으로 간주됩니다.Swift에서 배열로부터 주어진 크기의 고유 한 배열을 만드는 방법은 무엇입니까?

func myFunction(array : [Int], arraySize : Int) -> [[Int]] { 
    //... What to put here? 
} 
+0

배열 매개 변수의 목적은 무엇인가? – arcticmatt

+0

배열의 요소 수를 지정합니다. – Carpsen90

+0

arraySize는 무엇입니까? – arcticmatt

답변

1

내가 정확하게 당신이 모든 K-요소를 n 개의 요소가 주어진 집합의 하위 집합을 만들려는 당신의 질문을 이해합니다. 이것은 모든 (K-1) 나머지 요소 a[2] ... a[n]의 - 요소 서브 세트와 제 소자 a[1] 결합

  • 의해 순환 할 수 있고,
  • a[2] ... a[n]의 - 요소 서브 세트의 모든 (K)를 첨가.

스위프트 코드 (약간 일반 그래서가 아니라 정수로 사용될 수 있음) :

func allSubsetsOf<T>(elements: [T], withCardinality k : UInt, 
    combinedWith prefix : [T] = [], startingWithIndex j : Int = 0) -> [[T]] { 

     if k == 0 { 
      return [prefix] 
     } 

     if j < elements.count { 
      let first = elements[j] 
      return allSubsetsOf(elements, withCardinality: k-1, combinedWith: prefix + [first], startingWithIndex : j+1) 
       + allSubsetsOf(elements, withCardinality: k, combinedWith: prefix, startingWithIndex: j+1) 
     } else { 
      return [] 
     } 
} 

예 :

let result1 = allSubsetsOf([1, 2, 3, 4, 5], withCardinality: 3) 
println(result1) 
// [[1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 3, 4], [1, 3, 5], [1, 4, 5], [2, 3, 4], [2, 3, 5], [2, 4, 5], [3, 4, 5]] 

let result2 = allSubsetsOf(["a", "b", "c", "d"], withCardinality: 2) 
println(result2) 
// [[a, b], [a, c], [a, d], [b, c], [b, d], [c, d]] 
관련 문제