216. 组合总和 III
class Solution {
List<List<Integer>> list=new ArrayList<>();
List<Integer> path=new ArrayList<>();
public List<List<Integer>> combinationSum3(int k, int n) {
backtracking(n,k,1);
return list;
}
public void backtracking(int n,int k,int start){
if(path.size()==k){
int sum=0;
for(int i=0;i<k;i++){
sum+=path.get(i);
}
if(sum==n) list.add(new ArrayList<>(path));
return;
}
for(int i=start;i<=9;i++){
path.add(i);
backtracking(n,k,i+1);
path.remove(path.size()-1);
}
}
}
17. 电话号码的字母组合
class Solution {
List<String> res=new ArrayList<>();
public List<String> letterCombinations(String digits) {
if(digits == null || digits.length()==0) return res;
String[] n_str={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
backtracking(digits,0,n_str);
return res;
}
StringBuilder temp=new StringBuilder();
public void backtracking(String digits,int index,String[] n_str ){
if(index==digits.length()){
res.add(temp.toString());
return;
}
String s2=n_str[digits.charAt(index)-'0'];
int n=s2.length();
for(int i=0;i<n;i++){
temp.append(s2.charAt(i));
backtracking(digits,index+1,n_str);
temp.deleteCharAt(temp.length()-1);
}
}
}
39. 组合总和
class Solution {
List<List<Integer>> list = new ArrayList<>();
List<Integer> path=new ArrayList<>();
public List<List<Integer>> combinationSum(int[] candidates, int target) {
Arrays.sort(candidates);
backtracking(candidates,target,0);
return list;
}
public void backtracking(int[] candidates,int target,int index){
if(target==0){
list.add(new ArrayList<>(path));
return;
}
if(target < 0){
return;
}
for(int i=index;i<candidates.length;i++){
path.add(candidates[i]);
target-=candidates[i];
backtracking(candidates,target,i);
path.remove(path.size()-1);
target+=candidates[i];
}
}
}