比如有[1,2]和[1,3,4]两组数组,每组取一个数字,根据size,组成新的数组。
如size为2,则结果为[[1,1],[1,3],[1,4],[2,1],[2,3],[2,4],[3,1],[4,1],[2,1],[3,2],[4,2]];
如果size为3,则结果为[[1,1,3],[1,1,4],[1,3,4]...以此类推]
大概就是一个函数 fun(arr1,arr2,size)然后得到一个新的数组
比如有[1,2]和[1,3,4]两组数组,每组取一个数字,根据size,组成新的数组。
如size为2,则结果为[[1,1],[1,3],[1,4],[2,1],[2,3],[2,4],[3,1],[4,1],[2,1],[3,2],[4,2]];
如果size为3,则结果为[[1,1,3],[1,1,4],[1,3,4]...以此类推]
大概就是一个函数 fun(arr1,arr2,size)然后得到一个新的数组
python3
from itertools import product,\
combinations as comb
def flatten(itr):
for el in itr:
if hasattr(el, "__iter__") and not isinstance(el, (str, bytes)):
yield from flatten(el)
else:
yield el
a = [1, 2]
b = [1, 3, 4]
print(list(product(a, b)))
#[(1, 1), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4)]
print([list(flatten(t))for t in product(a, comb(b, 2))])
#[[1, 1, 3], [1, 1, 4], [1, 3, 4], [2, 1, 3], [2, 1, 4], [2, 3, 4]]
把他们丢进一个set里,然后剩下的就是 n个不重复数字能组成多少个指定size的数组 问题了
也就是 (n-size+1)*(n-size)/2
额,仔细看了下,要分两步,第一步先拆分size,第二步再取数
取数还是可以套用上面的算法,拆分的算法也较好实现
大概步骤:
计算较短,较长数组长度,记为min,max
然后将min与size比较,取较小为临界值(flag)
剩下的就是从min长度数组里取flag个数,从max取size-flag个数
然后flag--
具体的逻辑判断还要更详细一点,大概思路就是这样了
10 回答11.1k 阅读
15 回答8.4k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
8 回答6.2k 阅读
2 回答2.6k 阅读✓ 已解决