1 public class Solution { 2 public List<Integer> largestDivisibleSubset(int[] nums) { 3 List<Integer> result = new ArrayList<>(); 4 if (nums.length == 0) { 5 return result; 6 } 7 8 int[] dp = new int[nums.length]; 9 int[] parent = new int[nums.length]; 10 int maxNum = 0; 11 int maxIndex = -1; 12 Arrays.sort(nums); 13 for (int i = nums.length - 1; i >= 0; i--) { 14 parent[i] = i; 15 for (int j = i; j < nums.length; j++) { 16 if (nums[j] % nums[i] == 0 && dp[i] < dp[j] + 1) { 17 dp[i] = dp[j] + 1; 18 parent[i] = j; 19 20 if (dp[i] > maxNum) { 21 maxNum = dp[i]; 22 maxIndex = i; 23 } 24 } 25 } 26 } 27 while (maxNum-- > 0) { 28 result.add(nums[maxIndex]); 29 maxIndex = parent[maxIndex]; 30 } 31 return result; 32 } 33 }