将一系列旋转拨盘设置为给定序列的最少步骤

时间:2018-07-27 07:11:43

标签: algorithm dynamic-programming min

所以我有以下问题: 有n个旋转拨盘,每个拨盘设置为0-9之间的某个数字,并且它们需要与另一组n个数字(也在0-9之间)匹配。

旋转的步骤是向上或向下旋转任何数量的连续刻度盘。刻度盘环绕9。也就是说,将刻度盘从9向上旋转1会得到0,反之亦然。

我需要找到使初始配置与给定配置相匹配的最小步骤数。

例如:Initial -> 154 Given -> 562

1.首先移动,第2个按1 154 -> 264-> 1步拨号
2.向上移动第一个拨盘3 264->564-> 3步
3.将第3个拨盘2下移564->562-> 2步
因此,最小步骤是6
我不需要代码,只需一些方法的见解即可。

1 个答案:

答案 0 :(得分:0)

我不确定我是否正确理解了问题。看来,如果您将两个数字一起旋转1步,那么该移动仅算作一个移动,而不是两个,对吗?

在这种情况下,为什么不计算每个数字与其另一个系列中的匹配之间的最小距离。在该组之后,减号和加号一起移动,并尽可能将数字一起移动。

例如:

145-> 632

  • 1的最小距离为5 +-(向上或向下)
  • 4的最小距离为1-
  • 5的最小距离为3-

由于只有减号,所以我将5也算作减号,然后执行以下操作:

  1. 将所有数字向下移动-> 034
  2. 将第一个和最后一个数字向下移动两步-> 832
  3. 将最后一个数字向下移动两步-> 632 =共5个步骤