나는 샘플을주는 것으로 설명하려고 노력할 것입니다.하나 이상의 문자 쌍 사이에 점이있는 단어의 순열을 결정하는 알고리즘
소스 :
something
변화 :
s.o.m.e.t.h.i.n.g
so.m.e.t.h.i.n.g
som.e.t.h.i.n.g
som.et.hi.n.g.
.
.
.
내가
사람이 생각이 C# 또는 델파이에서 위와 같이 최대 variatons을 만들기 위해 알고리즘을해야합니까?
나는 샘플을주는 것으로 설명하려고 노력할 것입니다.하나 이상의 문자 쌍 사이에 점이있는 단어의 순열을 결정하는 알고리즘
소스 :
something
변화 :
s.o.m.e.t.h.i.n.g
so.m.e.t.h.i.n.g
som.e.t.h.i.n.g
som.et.hi.n.g.
.
.
.
내가
사람이 생각이 C# 또는 델파이에서 위와 같이 최대 variatons을 만들기 위해 알고리즘을해야합니까?
.
을 삽입 할 수있는 n + 1 점이 있습니다. 따라서 바이너리로 계산하면 모든 변형을 찾을 수 있습니다.
카운터의 각 비트는 삽입 위치에 해당합니다. 비트가 1이면 0이 아닌 경우 .
을 삽입합니다.
for(int variation=0;variation<(1<<(s.Length+1));variation++)
{
string variatedWord="";
for(int position=0;position<length(s)+1)
{
if(variation&(1<<position)!=0)
variatedWord+=".";
if(position<s.Length)
variatedWord+=s[positon];
}
yield return variatedWord;
}
using System;
using System.Collections.Generic;
namespace ConsoleApplication {
public static class ConsoleApp {
public static void Main() {
foreach (var permutation in Permutations("some"))
Console.WriteLine(permutation);
Console.ReadLine();
}
public static IEnumerable<String> Permutations(String value) {
if (value.Length == 1) {
yield return value;
} else {
var current = value.Substring(0, 1);
foreach (var permutation in Permutations(value.Substring(1)))
yield return current + "." + permutation;
foreach (var permutation in Permutations(value.Substring(1)))
yield return current + permutation;
}
}
}
}
thats a want what :) – aeon
@aeon : Welcome to StackOverflow. 이 대답이 당신이 원하는 것이라면 그것을 받아들이는 것을 고려해 볼 수 있습니다 (질문을 한 사람은 확인 표시가 있거나 위쪽/아래쪽 화살표 옆에 있어야만 대답을 받아 들일 수 있습니다). –
수율. 마찬가지로 :) 재귀가 수익률로 조언을하지 않지만 ... 스택을 날려 버리고있어. –
숙제, 아마도? –
마지막 예가 철자가 잘못되었거나 글자를 놓거나 옮기고 싶습니까? –
철자가 잘못되었습니다. – aeon