2017-09-06 4 views
-4

두 개의 문자열 첫 번째 단어와 두 번째 문자의 모든 조합을 생성하고 싶습니다. 모든 가능한 조합을 생성하기 위해 첫 번째 단어에 두 번째 단어를 삽입하고 싶습니다. 유일한 규칙은이 예에서 서로두 단어의 모든 조합 생성

뒤에

없음 삽입 된 단어 :

string input = "Hello"; 
string secondInput = "."; 

이 방법은 : GenerateAllCombinations(input,secondInput);는 반환 :

//1 dot 
.Hello 
H.ello 
He.llo 
Hel.lo 
Hell.o 
Hello. 

//2 dot 
.H.ello 
.He.llo 
.Hel.lo 
.Hel.lo 
.Hell.o 
.Hello. 
.He.llo 
.Hel.lo 
.Hell.o 
.Hello. 
.Hel.lo 
.Hell.o 
.Hello. 
H.e.llo 
H.el.lo 
H.ell.o 
H.ello. 
Hel.l.o 
Hel.lo. 
Hell.o. 

//3 dots 
.H.e.llo 
.H.el.lo 
.H.ell.o 
.H.ello. 
.He.l.lo 
.He.ll.o 
.He.llo. 
.Hel.l.o 
.Hel.lo. 
.Hell.o. 

//4 dots 
.H.e.l.lo 
.H.e.ll.o 
.H.e.llo. 
.He.l.l.o 
.He.l.lo. 
.Hel.l.o. 

//5 dots 
.H.e.l.l.o 
.H.e.l.lo. 
.He.l.l.o. 

규칙으로 나는 이런 것을 원하지 않는다고 말합니다 : Hell.o....

이렇게하면 무제한 조합이 생성되지 않습니다.

그래서 가장 좋은 생각은 재귀를 사용하는 것입니다. 이미 원하는 코드를 추가했지만 재귀를 사용하지는 않습니다. 주된 문제는 모든 입력에 내 코드를 사용할 수 없다는 것입니다. 그것은 size'd 단어의 1 종류와 함께 일하고 있습니다. 이 문제를 해결하는 방법을 알고 있습니까?

+2

지금까지 시도한 것은 무엇입니까? –

+0

재귀 메서드는 자체를 호출하므로 메서드는 첫 번째 문자열의 각 열에 대한 매개 변수로 카운터를 필요로합니다. – louis12356

+4

도움을 요청하기 전에 시도하고 문제를 해결하십시오. – RH6

답변

1

자리 표시 자수는 M=Len(Input)+1입니다.
2^M 변형 (도트가없는 소스 문자열 포함) 도트를 배치 (또는 생략) 할 수 있습니다.
그래서 2^M-1 0에서 루프을 루프 카운터의 이진 표현에서 하나의 비트 위치에 점을 삽입

예 : "안녕"입력 카운터
는 63
카운터 21dec=010101bin 대응 0 내지 간다 ".he.ll.o"로