if n_perm_elements -- 1: if (sum_total <- 15) & (sum_total >= 0): yield (sum_total,) else: for value in range(0, 16): for permutation in permutations_w_constraints( n_perm_elements - 1, sum_total - value): yield (value,) + permutation n - 10 k - 8 new_list - list(permutations_w_constraints(n,k)) print(len(new list))
How can the following function be simplified so that it has a time complexity of O(n) or faster?
For your information, the specifications of the functions are as follows:
Using numbers ranging from 0 to 15 (inclusive), create all possible lists which sum up to K and have a length of N. Duplicated numbers are allowed as long as it fulfills the conditions above (this means [0,0,1], [0,1,0] and [1,0,0] are all correct outputs if K=1 and N=3). When instantiated with the list function, the list size of the function should be the number of all lists.
For example, given K=23 and N=2, the expected list size is 8. The function must be able to accept N=10 and be finished before 9 seconds. Do not use itertools or external libraries.
Step by step
Solved in 3 steps