중복 문자 의 문자열 조합 을 고려 하지 않 습 니 다.
2741 단어 알고리즘 설계 및 분석
하 해도 의 을 배 우 는 동안 방법 은 이해 하기 쉽 지만 알고리즘 의 구체 적 인 실현 은 어렵 기 때문이다.그래서 인터넷 코드 를 참고 했다.또한 나중에 독자 들 이 사용 할 수 있 도록 씁쓸 하고 이해 하기 어 려 운 코드 에 주석 을 달 았 다.
문자열 을 입력 하여 이 문자열 의 모든 조합 을 출력 합 니 다.예 를 들 어 'abc' 를 입력 하면 a, b, c, ab, ac, bc, abc 가 조합 되 어 있 습 니 다.
이 문제 도 재 귀적 인 사고방식 으로 문자열 의 조합 을 구 할 수 있다. n 길이 의 문자열 에서 m 문자 의 조합 을 구하 고 싶다 고 가정 합 니 다.우 리 는 먼저 문자열 의 첫 번 째 문 자 를 처음부터 스 캔 합 니 다.첫 번 째 문자 에 대해 우 리 는 두 가지 선택 이 있 습 니 다. 하 나 는 이 문 자 를 조합 에 넣 는 것 입 니 다. 그 다음 에 우 리 는 남 은 n - 1 문자 중에서 m - 1 문 자 를 선택해 야 합 니 다.이 문 자 를 조합 에 넣 지 않 고 나머지 n - 1 글자 중에서 m 문 자 를 선택해 야 합 니 다.이 두 가지 선택 은 모두 재 귀적 으로 실현 하기 쉽다.다음은 이런 사고방식 의 참고 코드 입 니 다.
#include
#include
#include
using namespace std;
#include
void Combination(char *string ,int number,vector &result);// string , number , vector
void Combination(char *string)
{
assert(string != NULL);
vector result;
int i , length = strlen(string);
for(i = 1 ; i <= length ; ++i)
Combination(string , i ,result);// string 1-length
}
void Combination(char *string ,int number , vector &result)
{
assert(string != NULL);
if(number == 0)
{// number+1 ( n number-1 )
static int num = 1;
printf(" %d \t",num++);
vector::iterator iter = result.begin();
for( ; iter != result.end() ; ++iter)
printf("%c",*iter);
printf("
");
return ;
}
if(*string == '\0')
return ;
result.push_back(*string);
Combination(string + 1 , number - 1 , result);//string+1 1, string[n-1] m-1 ,
result.pop_back();
Combination(string + 1 , number , result);//string+1 1, string[n-1] m ,
}
int main(void)
{
char str[] = "abc";
Combination(str);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
디 제 스 트 라 알고리즘 으로 권한 부여 그림 의 가장 짧 은 경 로 를 구하 십시오.Description 디 제 스 트 라 알고리즘 으로 나머지 모든 노드 의 가장 짧 은 경 로 를 구하 세 요. Input 먼저 100 보다 작은 정수 n 을 입력 한 다음 에 그림 의 인접 행렬 (10000 은 무...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.