我有一系列错误编码的base36值 - 这些值是使用缺少“i”和“o”的字母串从整数编码的。现在需要将它们转换回整数(使用c#)
由于翻转效应,存在多种排列。
“0”可以等于0或34 “1”可以等于1或35.
所以,例如,如果我有一个字符串“a110”,这有六个可能的值。
我很难设法为此编写代码。 我看过的所有例子都有一组元素的变体:例如。
char [] = {a,b,c}
int [] = {1,2,3}
然而,在我的情况下,也涉及条件,这让我的头部受伤。有人可以帮忙吗?答案 0 :(得分:0)
您可以计算所有可能输入字符串的列表。首先,将输入读入一个int列表。现在,你知道每一个(如果它的价值足够低)可能是两件事之一。那么你就可以创建一个枚举器,它通过递归下降返回所有可能的输入。
答案 1 :(得分:0)
我设法用以下代码完成。它实际上比我预期的要简单一点,因为我只有两个条件和两个选项。它使用递归并逐步执行字符串中的每个字符。如果该字符为0或1,则它会发散,并继续构建字符串。
它实际上会生成一些重复项,因此我必须添加一个条件,只将其添加到字符串列表中(如果它尚不存在)。如果其他人可以指出我稍微好一点的逻辑,我会很感激
public string st = "101"; // hardcoded for now
public char[] cs;
public List<string> variations;
static void Main()
{
cs = st.ToCharArray();
variations = new List<string>();
vary("",0);
}
static void vary(string m, int n)
{
for (int i = n; i < cs.Count(); i++)
{
if (cs[i] == '0' || cs[i] == '1')
{
// recurse
combo(m + (cs[i] == '0' ? "0" : "1"), i + 1);
combo(m + (cs[i] == '0' ? "Y" : "Z"), i + 1);
}
m += cs[i];
}
if(!variations.Contains(m))
variations.Add(m);
}
对于字符串“101”我得到以下组合
101
10Z
1Y1
1YZ
Z01
Z0Z
ZY1
ZYZ