[100번] 제53번 문자열의 전체 배열
1) 각 원소를 순서대로 수위에 올리고 나머지 원소를 귀속시킨다
2) 현재 요소가 끝에 도달하면 이 시퀀스를 출력합니다
관건은 다음과 같다.
원소마다 교환이 끝난 후에 교환해야 한다.각 원소는 순서대로 수위를 차지하고,
for (int i=currentIndex; i<=n;+i) {swap는 i+1에서 swap으로 귀속됩니다}
#include<stdio.h>
#include<stdlib.h>
#define SWAP(x,y,t)((t)=(x),(x)=(y),(y)=(t))
int score=0;
void perm(int *list,int i,int n)
{
int j,temp;
if(i==n)
{
for(j=0;j<=n;j++)
{
printf("%d ",list[j]);
}
printf("
");
score++;
}
else
{
for(j=i;j<=n;j++)
{
SWAP(list[i],list[j],temp);
perm(list,i+1,n);
SWAP(list[i],list[j],temp);
}
}
}
int main()
{
int list[]={1,2,3};
perm(list,0,2);
printf("Thetotal number is %d
",score);
system("pause");
}
String 버전
#include <iostream>
using namespace std;
void Permutation(string pStr, int k, int n)
{
if(k==n)
cout<<pStr<<endl;
for(int i=k;i<n;++i)
{
swap(pStr.at(i),pStr.at(k));
Permutation(pStr, k+1,n);
swap(pStr.at(i),pStr.at(k));
}
}
int main()
{
strings="abcdef";
Permutation(s,0,s.length());
}
2. 확장
만약 문자를 구하는 모든 배열이 아니라 문자를 구하는 모든 조합이라면 어떻게 해야 합니까?(P72)
사고방식: 여기는 교환 방식이 아니라 삭제 방식을 채택한다.서로 다른 제거 순서를 사용하고prex로 삭제 값을 보류하면 조건에 부합되는 모든 서열을 얻을 수 있습니다
#include <iostream>
using namespacestd;
voidselect(string str, string prex)
{
string temp=str;
cout<<prex<<endl;
for(int i=0;i<str.length();++i)
{
select(str.erase(i,1),prex+str.at(i));
str=temp;
}
}
int main()
{
string s="abcd";
select(s,"");
}
확장 2:
입력한 문자열에 같은 문자열이 있을 때, 같은 문자 교환 위치는 서로 다른 배열이지만 같은 조합이다.예를 들어 aaa를 입력하면 6개의 aaa가 배열되지만 대응하는 조합은 하나입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.