用Java中的置换法解方程

用Java中的置换法解方程,java,permutation,equation,backtracking,brute-force,Java,Permutation,Equation,Backtracking,Brute Force,对于给定的问题,我被赋予两个数字,它们将以这种方式求和到某个结果: num1 + num2 = result 然而,这些数字将被“编码”,因此,例如,输入可能是: ab + bc = acd 数字的长度可以是9位数 我的任务是创建一个有效的方法,找出每个输入有多少可能的解决方案,或者是否不可能 我通过创建一个名为Number(java中)的类来解决这个问题,该类有一个字母(char类型)和一个数值(int),然后我将每个数字转换为这个新类号的数组,这样我就可以轻松地检查它们的当前值 然而,我

对于给定的问题,我被赋予两个数字,它们将以这种方式求和到某个结果:

num1 + num2 = result
然而,这些数字将被“编码”,因此,例如,输入可能是:

ab + bc = acd
数字的长度可以是9位数

我的任务是创建一个有效的方法,找出每个输入有多少可能的解决方案,或者是否不可能

我通过创建一个名为Number(java中)的类来解决这个问题,该类有一个字母(char类型)和一个数值(int),然后我将每个数字转换为这个新类号的数组,这样我就可以轻松地检查它们的当前值

然而,我不太确定如何处理这个回溯问题

我知道,我应该开始比较数字1和数字2的单位,然后是十,等等,在每个“级别”中,只选择总和符合逻辑的情况,因此,例如,在上面的例子中,对于单位b=2和c=3,只有当d=5时才有意义,我可以放弃d!=3的所有其他情况5表示这两个先前存在的值

有人告诉我,仅使用两个循环就可以覆盖所有这些排列:一个循环遍历可能的数字[0到9],另一个循环覆盖所有字母/变量,但我不太明白如何做到这一点

如果让我想象的话,我想我可以把它想象成

for cycle ( through "columns" from the rightmost up to the leftmost column of the shortest number)
  for cycle( for numbers 0 to 9?) 

但是我仍然无法理解这个主题的方法,或者我如何用递归来解决这个问题,我非常感谢所有有助于提高我理解的方法。

这里有一个算法应该可以工作

让我们以你的等式为例:

ab + bc = acd
  • 确定方程式中唯一字符的数量。在您的示例中,这将是四个(a、b、c、d)

  • 为了迭代所有的可能性,我们将设置一个循环。此循环的最小值为10^3或1000。此循环的最大值为10^4或10000。等式中唯一字符的数量决定了将使用的10次方幂。最大值为10^10,大于
    int
    。长的
    就行了

  • 在迭代过程中,将索引拆分为N个数字。在您的示例中,这将是4位数字。由于我们从1000迭代到9999(不包括10000),所有索引值都将有4位数字

  • 检查以确保N个数字是唯一的。没有重复的。这将在开始时消除大多数索引值

  • 将数字代入方程式,检查方程式是否有效。如果是,请将方程式保存在
    列表中

  • 输出
    列表
    值或完成迭代后未找到解决方案


  • 你的投入是什么?你的产出是多少?你的问题不清楚。你说一个数字可以是9位数,是不是意味着
    a
    可以是
    1236548
    ??或者一个字母等于一个数字?@majid hajibaba:每个字母都是一个数字。一个等式的每个操作数或和最多可以有九个字母。对于OP:我在过去使用蛮力来解决这类问题,因为方程最多可以有10个不同的字母代表0-9,最多27个字母(三个10^9整数)。带有微小数字的嵌套循环速度很快。