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.
Extracted text: def permutations_w_constraints(n_perm_elements, sum_total): 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 %3D new_list list(permutations_w_constraints(n,k)) print(len(new_list))
=>