请注意,这不是this的重复,而是它的一个子问题。
这是问题所在:
您会得到一个数字数组0-9和一个整数n。该数组可以包含任何给定数字的重复项。查找所有整数,这些整数可以通过污染输入数组中的数字来形成,并且具有n个数字。输入数组中的数字可以在输出中的元素中重复。
例如,作为输入[2,5]且n = 3,则应为以下内容:
[222,225,252,255,522,525,552,555]
请注意,这就是Python的itertools.product的计算结果。他们的算法在该链接中列出-尽管我无法确定其运行时复杂度,但我认为它是最佳的。该解决方案的运行时复杂度是多少?
答案 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, "");
结果向量是最终输出。