Permutation 전체 정렬
귀속 해결 전체 배열(소급법)
회소법의 사고방식도 이해하기 어렵지 않다.어떻게 귀속되는지 고찰하자, 1234를 예로 들자.우선 1위를 고려해야 한다. 이로써 후속 요소와 교환하여 2-134, 3-214, 4-231을 얻을 수 있다.그리고 다음 세 자리를 차례로 호출하면 된다.교환할 수 없는 (한 분만 남았음) 으로 돌아가면 출력합니다.
class Solution1{
public:
vector permute(string s){
vector result;
helper(result, s, 0);
return result;
}
void helper(vector& result, string& s, int index){
if(index == s.size()-1)
result.push_back(s);
for(int i = index; i
반복 요소 고려하기
전체 배열은 첫 번째 숫자부터 각각 그 뒤의 숫자와 교환되기 때문이다.우리는 먼저 이런 판단을 덧붙여 보았다. 만약 한 수가 뒤의 숫자와 같다면 이 두 수는 교환되지 않을 것이다.예를 들어 122에서 첫 번째 숫자와 뒤의 숫자는 212, 221로 교환된다.그리고 122에서 두 번째 수는 세 번째 수와 교환할 필요가 없지만 212에 대해서는 두 번째 수와 세 번째 수는 같지 않고 교환한 후에 221을 얻는다.122에서 첫 번째 수와 세 번째 수를 교환하여 얻은 221과 중복되었다.그래서 이 방법은 안돼.
다른 사고방식으로 122에 대해 첫 번째 수 1과 두 번째 수 2를 교환한 다음에 첫 번째 수 1과 세 번째 수 2를 교환하는 것을 고려한다. 이때 세 번째 수는 두 번째 수와 같기 때문에 첫 번째 수는 세 번째 수와 교환하지 않는다.다시 212를 고려하면 그의 두 번째 수와 세 번째 수를 교환하면 221을 해결할 수 있다.전체 정렬이 생성됩니다.
이렇게 해서 우리도 전체 배열에서 중복을 없애는 규칙을 얻었다. 중복을 없애는 전체 배열은 첫 번째 숫자부터 각각 그 뒤에 반복되지 않는 숫자와 교환하는 것이다.프로그래밍으로 설명하자면 i개수와 j개수를 교환할 때 [i, j)에는 j개수와 같은 수가 없습니다. 다음은 전체 코드를 보여 줍니다.
class mySolution02{
public:
bool isduplicate(string& s, int start, int end){
for(int i = start ; i permute(string s){
sort(s.begin(), s.end());
vector result;
helper(result, s, 0);
return result;
}
void helper(vector& result, string& s, int index){
if(index == s.size()-1)
result.push_back(s);
for(int i = index; i
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.