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

时间:2018-09-12 02:18:14

标签: algorithm data-structures

请注意,这不是this的重复,而是它的一个子问题。

这是问题所在:

  

您会得到一个数字数组0-9和一个整数n。该数组可以包含任何给定数字的重复项。查找所有整数,这些整数可以通过污染输入数组中的数字来形成,并且具有n个数字。输入数组中的数字可以在输出中的元素中重复。

     

例如,作为输入[2,5]且n = 3,则应为以下内容:

     

[222,225,252,255,522,525,552,555]

请注意,这就是Python的itertools.product的计算结果。他们的算法在该链接中列出-尽管我无法确定其运行时复杂度,但我认为它是最佳的。该解决方案的运行时复杂度是多少?

1 个答案:

答案 0 :(得分:0)

vector<string> result;

// storing the concatenation of digits as a string as it is to operate on, we can convert the concatenated string to int at the end.

FormDigits(vector<int> input, int index, int n, string ndigits) {

 // if the ndigits size has reached n
 // Check whether that is already present in the result as we have repeating digits
 if(ndigits.size() == n && result.find(ndigits) != result.end()) { 
     result.push(ndigits);
 } 

  // if ndigits size hasnt yet reached run a loop and add next digit 
 else {
    for(int i=index; i<input.size(); i++) {
        FormDigits(input,i,n,digit+to_string(arr[i]));
    }
 }
}

以上函数应从main调用为

FormDigits(InputArray, 0, n, "");

结果向量是最终输出。