LeetCode77.组合
public List<List<Integer>> dp = new ArrayList<>();
public List<Integer> path = new ArrayList<>();
public List<List<Integer>> combine(int n, int k) {
dps(n,k,1);
return dp;
}
public void dps(int n,int k ,int index) {
if(path.size()==k) {
dp.add(List.copyOf(path));
return;
}
//剪枝条件
for(int i=index;i<=n - (k - path.size()) + 1;i++) {
path.add(i);
dps(n,k,i+1);
path.remove(path.size()-1);
}
}
LeetCode216.组合总和III
public List<List<Integer>> dp = new ArrayList<>();
public List<Integer> path = new ArrayList<>();
public List<List<Integer>> combinationSum3(int k, int n) {
dps(n,k,1,0);
return dp;
}
public void dps(int n,int k ,int index,int sum) {
if(path.size()==k) {
if(sum==n) {
dp.add(List.copyOf(path));
}
return;
}
//剪枝条件
for(int i=index;i<=9;i++) {
if(i+sum<=n) {
path.add(i);
dps(n,k,i+1,sum+i);
path.remove(path.size()-1);
}
}
}
Leetcode17.电话号码的字母组合
public List<String> dp = new ArrayList<>();
public List<String> path = new ArrayList<>();
Map<Integer,String> hash = new HashMap<>();
public List<String> letterCombinations(String digits) {
if(digits.length()==0) {
return dp;
}
hash.put(2,"abc");
hash.put(3,"def");
hash.put(4,"ghi");
hash.put(5,"jkl");
hash.put(6,"mno");
hash.put(7,"pqrs");
hash.put(8,"tuv");
hash.put(9,"wxyz");
dps(digits,0);
return dp;
}
public void dps(String digits,int index) {
if(path.size()==digits.length()) {
dp.add(String.join("", path));
return;
}
int k = digits.charAt(index)-'0';
String sub = hash.get(k);
for(int i=0;i<sub.length();i++) {
path.add(String.valueOf(sub.charAt(i)));
dps(digits,index+1);
path.remove(path.size()-1);
}
}