硬币找零细则问题
硬币找零:获得找零的各种情况,candidates={3,6,7,9},target=9,输出[[3,3,3],[3,6],[9]]。动态规划只能得到不同情况的总数,不能获得具体结果。
import java.util.*;
public class Main {
List<List<Integer>> results = new ArrayList<>();
Set<String> unique = new HashSet<>();
public static void main(String[] args) {
int[] candidates = {3, 6, 7, 9};
Main m = new Main();
Arrays.sort(candidates);
m.change(candidates, 9, new LinkedList<>());
System.out.println(m.results.size());
}
public void change(int[] candidates, int target, LinkedList<Integer> result) {
if(target == 0){
StringBuilder key = new StringBuilder();
List<Integer> temp = new LinkedList<>(result);
Collections.sort(temp);
for(int i : temp){
key.append(i);
}
if(!unique.contains(key.toString())) {
results.add(temp);
unique.add(key.toString());
}
return;
}
for (int candidate : candidates) {
result.offerLast(candidate);
if (target - candidate >= 0) {
change(candidates, target - candidate, result);
}
result.pollLast();
}
}
}

查看12道真题和解析