【发布时间】:2018-08-28 12:23:52
【问题描述】:
还有另一个 Stack Overflow 帖子是为与车辆登记号相关的算法创建的...
根据输入的车牌(例如 ABC123)和列表 替换值(例如 1 替换为 I)。我需要得到所有可能 组合。
@ArturoMenchaca 的答案非常适合 C#,但我希望在 Java 中使用它,但鉴于“yield”不可用,我真的无法思考如何转换它。
你会如何把这段代码翻译成 Java?
public static IEnumerable<string> Combinations(string s, Dictionary<char, char> replacements)
{
return Combinations(s, replacements, 0, string.Empty);
}
private static IEnumerable<string> Combinations(string original, Dictionary<char, char> replacements, int index, string current)
{
if (index == original.Length) yield return current;
else
{
foreach (var item in Combinations(original, replacements, index + 1, current + original[index]))
yield return item;
if (replacements.ContainsKey(original[index]))
foreach (var item in Combinations(original, replacements, index + 1, current + replacements[original[index]]))
yield return item;
}
}
你会调用然后调用这样的方法..
Dictionary<char, char> dict = new Dictionary<char,char>();
dict['1'] = 'I';
dict['3'] = 'B';
dict['A'] = 'H';
dict['O'] = '0';
dict['0'] = 'O';
var combs = Combinations("ABC123", dict);
【问题讨论】:
-
只要内存允许,您可以将返回类型替换为
List<string>,并将每个yield替换为list.Add()。
标签: java combinations