Largest Divisible Subset思路:好的方法肯定是动态规划,然而并不知道怎么获得最后的数组,我只能用动态规划获得长度,所以换了一种方法。
首先对nums进行排序操作,然后建立一个List<List<Integer>>,里面装所有符合条件的数组,每次新来一个数,扫描整个list,跟每个list最后一个元素做整除比较,如果有符合条件的,选择最长的一个进行复制,添加该元素,然后将list放进整个大list中
GitHub地址:https://github.com/corpsepiges/leetcode
public class Solution {
public int[] largestDivisibleSubset(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> sumList=new ArrayList<List<Integer>>();
for (int i = 0; i < nums.length; i++) {
int length=0;
int index=-1;
for (int j = 0; j < sumList.size(); j++) {
if (sumList.get(j).size()>length&&nums[i]%sumList.get(j).get(sumList.get(j).size()-1)==0) {
index=j;
length=sumList.get(j).size();
}
}
List<Integer> test=new ArrayList<Integer>();
if (index!=-1) {
test.addAll(sumList.get(index));
}
test.add(nums[i]);
sumList.add(test);
}
int index=0;
int length=0;
for (int i = 0; i < sumList.size(); i++) {
if (sumList.get(i).size()>length) {
length=sumList.get(i).size();
index=i;
}
}
int[] ans=new int[length];
for (int i = 0; i < length; i++) {
ans[i]=sumList.get(index).get(i);
}
return ans;
}
}