这是问题所在:
系统会为您提供一个数字数组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 。但是,这似乎很笨拙,我想知道是否有更好的方法。
答案 0 :(得分:2)
使用递归。
编写一个函数,该函数输出与n
相同位数的所有答案。调用此功能doit(n)
。然后,为其提供伪代码:
n
的最高有效位,将其命名为d
d1
的数字d
,输出以d1
开头的所有数字d
除去数字n
;将结果称为n1
doit(n1)
;到结果列表中的每个数字之前,在数字d