请记住,集合是无序的,没有重复项。
定义长度为K的N个唯一加法集合S是一个集合,使得S中所有N个长度子集的总和为不同的数。换句话说,S的所有N个长度的子集的和都是不同的。
目标给定一个数组/集合作为输入,并N
以任意合理格式给函数或完整程序提供一个数字,查找并返回或输出表示输入是否为N的真实或假值(错误为假)。独特的添加剂。
您可以假设每个元素最多只能出现一次,并且每个数字都在您语言的本机数据类型之内。如果需要,您还可以假设输入已排序。最后,您可以假设0 < N <= K
。
例子
让我们考虑一下set S = {1, 2, 3, 5}
和N = 2
。这是所有唯一对的总和S
(因为唯一对是唯一的总和):
1 + 2 = 3
1 + 3 = 4
1 + 5 = 6
2 + 3 = 5
2 + 5 = 7
3 + 5 = 8
我们可以看到输出中没有重复项,因此S是2唯一加法的。
现在让我们考虑集合T = {12, 17, 44, 80, 82, 90}
和N = 4
。以下是长度4的所有可能总和:
12 + 17 + 44 + 80 = 153
12 + 17 + 44 + 82 = 155
12 + 17 + 44 + 90 = 163
12 + 17 + 80 + 82 = 191
12 + 17 + 80 + 90 = 199
12 + 17 + 82 + 90 = 201
12 + 44 + 80 + 82 = 218
12 + 44 + 80 + 90 = 226
12 + 44 + 82 + 90 = 228
12 + 80 + 82 + 90 = 264
17 + 44 + 80 + 82 = 223
17 + 44 + 80 + 90 = 231
17 + 44 + 82 + 90 = 233
17 + 80 + 82 + 90 = 269
44 + 80 + 82 + 90 = 296
它们都是唯一的,因此T是4唯一的加法。
测试用例
[members], N => output
[1, 4, 8], 1 => true
[1, 10, 42], 1 => true ; all sets trivially satisfy N = 1
[1, 2, 3, 4], 3 => true
[1, 2, 3, 4, 5], 5 => true
[1, 2, 3, 5, 8], 3 => true
[1, 2, 3, 4, 5], 2 => false ; 1 + 4 = 5 = 2 + 3
[-2, -1, 0, 1, 2], 3 => false ; -2 + -1 + 2 = -1 = -2 + 0 + 1
[1, 2, 3, 5, 8, 13], 3 => false ; 1 + 2 + 13 = 16 = 3 + 5 + 8
[1, 2, 4, 8, 16, 32], 3 => true
[1, 2, 4, 8, 16, 32], 4 => true
[1, 2, 4, 8, 16, 32], 5 => true
[1, 2, 4, 8, 16, 32], 6 => true
[3, 4, 7, 9, 12, 16, 18], 6 => true
[3, 4, 7, 9, 12, 16, 18], 3 => false ; 3 + 4 + 12 = 19 = 3 + 7 + 9
falsey
吗?
N <= K
?