📅  最后修改于: 2023-12-03 15:22:57.104000             🧑  作者: Mango
给定一个正整数数组 nums 和一个正整数 k ,找出由最大的 k 个数组成的数,满足该数可被 nums 中所有数字整除。
输入: nums = [1,2,3,4,5,6], k = 3 输出: "12"
输入: nums = [3,7,2,1,2,3,4,6,7,1,8,9,2], k = 5 输出: "8748"
from math import gcd
from itertools import combinations
from typing import List
def largestMultiple(nums: List[int], k: int) -> str:
# 计算数组最小公倍数
lcm = nums[0]
for num in nums[1:]:
lcm = lcm * num // gcd(lcm, num)
# 排序并选取前 k 个数字
nums.sort(reverse=True)
res = ''.join(str(num) for num in nums[:k])
# 判断res是否能被数组的最小公倍数整除
while int(res) % lcm != 0:
# 尝试其他组合
res = max(combinations(res, k), key=lambda x: int(''.join(x)))
return res
时间复杂度:$O(n\log n+k^k)$, 其中 n 是数组 nums 的长度。求最小公倍数的时间复杂度为 O(n),排序的时间复杂度为 O(n log n),判断字符串是否能被最小公倍数整除的时间复杂度为 O(k^k)。