package leetcode import "sort" func largestDivisibleSubset(nums []int) []int { sort.Ints(nums) dp, res := make([]int, len(nums)), []int{} for i := range dp { dp[i] = 1 } maxSize, maxVal := 1, 1 for i := 1; i < len(nums); i++ { for j, v := range nums[:i] { if nums[i]%v == 0 && dp[j]+1 > dp[i] { dp[i] = dp[j] + 1 } } if dp[i] > maxSize { maxSize, maxVal = dp[i], nums[i] } } if maxSize == 1 { return []int{nums[0]} } for i := len(nums) - 1; i >= 0 && maxSize > 0; i-- { if dp[i] == maxSize && maxVal%nums[i] == 0 { res = append(res, nums[i]) maxVal = nums[i] maxSize-- } } return res }