我正试图通过我以前没有见过的场景工作,并且正在努力想出一个算法来正确实施此操作。我的问题的一部分是对正确术语的朦胧回忆。我相信我所需要的是标准“组合”问题的变体,但我很可能离开那里。带字符替换的字符串组合
场景 给出的例子串"100"
(让我们称之为x
),产生的x
该换出的那些0
(零)个字符一个用于o
(小写O)的所有组合。因此,对于"100"
简单的例子,我希望这样的输出:
"100"
"10o"
"1o0"
"1oo"
这将需要支持不同长度的字符串与不同0
个字符的数字,但假设永远不会有超过5个的实例。
我有这个非常简单的算法,我的"100"
样的作品,但任何东西分崩离析更长/更复杂:
public IEnumerable<string> Combinations(string input)
{
char[] buffer = new char[input.Length];
for(int i = 0; i != buffer.Length; ++i)
{
buffer[i] = input[i];
}
//return the original input
yield return new string(buffer);
//look for 0's and replace them
for(int i = 0; i != buffer.Length; ++i)
{
if (input[i] == '0')
{
buffer[i] = 'o';
yield return new string(buffer);
buffer[i] = '0';
}
}
//handle the replace-all scenario
yield return input.Replace("0", "o");
}
我有一种挥之不去的感觉,递归可能是我的朋友在这里,但我努力弄清楚如何将我需要的条件逻辑合并到这里。
你不能只是有一个局部数组的位置的零,然后枚举二进制数字与零和小o的二进制数字的替代? – 2015-03-02 21:01:23
@Meehm不确定我是否遵循你的意思,你能提供一个实现和/或额外的细节吗? – 2015-03-02 21:05:00