Given a set of distinct positive integers nums,
return the largest subset answer such that every pair (answer[i], answer[j])
of elements in this subset satisfies:
answer[i] % answer[j] == 0, or
answer[j] % answer[i] == 0
If there are multiple solutions, return any of them.
양의 정수가 담긴 배열 nums가 주어진다, 이 nums로 아래의 조건을 만족하는 부분배열을 만들었을때
최대 길이의 부분배열을 리턴하시오, 여러개가 있으면 그중 아무거나 리턴하면 된다.
Input: nums = [1,2,4,8]
Output: [1,2,4,8]
Explanation: 2 % 1 == 0 , 4 % 2 == 0 , 8 % 4 == 0
class Solution:
def largestDivisibleSubset(self, nums: List[int]) -> List[int]:
nums.sort()
cache = {}
def search(i: int):
if i == len(nums):
return []
if i in cache:
return cache[i]
// search(i)는 nums[i] 로 시작하는 큰 부분배열이기에 기본으로 포함한다.
res = [nums[i]]
for j in range(i + 1, len(nums)):
// nums[i]가 nums[j]를 나눌수 있으면 이를 포함한다는 의미.
if nums[j] % nums[i] == 0:
// nums[j]를 포함한다.
tmp = [nums[i]] + search(j)
// 더 긴 배열인지 확인후 변경한다.
if len(tmp) > len(res):
res = tmp
cache[i] = res
return res
// search(i)는 i부터 시작하는것을 확인하기에 다른 index로 부터 시작하는것도 전부 검사해야 한다.
res = []
for i in range(len(nums)):
tmp = search(i)
if len(res) < len(tmp):
res = tmp
return res