给定一个数字数组0-9和一个整数n,找到可以由输入数组形成且小于n的所有整数

时间:2018-09-02 23:08:11

标签: algorithm data-structures

这是问题所在:

  

系统会为您提供一个数字数组0-9和一个整数 n 。该数组可以包含任何给定数字的重复项。从输入数组中找出所有可以包含数字的整数,这些整数应小于 n 。输入数组中的数字可以在输出中的元素中重复。

     

例如,作为输入[2,5,8]且n = 223,则应为以下输出:

     

[2,5,8,22,25,28,52,55,58,82,85,88,222]

很明显,任何数字少于 n 的整数都将被接受,而任何数字被拒绝的整数都将被接受。但是如何最有效地找到位数相同的数字呢?我知道的一个解决方案是嵌套for循环,输入整数中的每个数字一个,然后从输入数组中形成数字的每个可能组合并检查它针对 n 。但是,这似乎很笨拙,我想知道是否有更好的方法。

1 个答案:

答案 0 :(得分:2)

使用递归。

编写一个函数,该函数输出与n相同位数的所有答案。调用此功能doit(n)。然后,为其提供伪代码:

  1. 找到n的最高有效位,将其命名为d
  2. 对于所有小于d1的数字d,输出以d1开头的所有数字
  3. d除去数字n;将结果称为n1
  4. 致电doit(n1);到结果列表中的每个数字之前,在数字d
  5. 之前