77. 组合
题目
链接
代码
class Solution {
public List<List<Integer>> combine(int n, int k) {
backtracking(n,k,1);
return result;
}
List<List<Integer>> result = new ArrayList();
List<Integer> paths = new ArrayList();
public void backtracking(int n,int k,int startIndex){
if(paths.size()>=k){
result.add(new ArrayList(paths));
return;
}
for(int i =startIndex;i<=n;i++){
paths.add(i);
backtracking(n,k,i+1);
paths.remove(paths.size()-1);
}
}
}
216. 组合总和 III
题目
链接
代码
class Solution {
public List<List<Integer>> combinationSum3(int k, int n) {
backtracking(k,n,1);
return result;
}
List<List<Integer>> result = new ArrayList();
List<Integer> paths = new ArrayList();
int sum = 0;
public void backtracking(int k,int n,int startIndex){
if(paths.size()==k&&sum==n){
result.add(new ArrayList(paths));
}
if(paths.size()>k||sum>n){
return;
}
for(int i=startIndex;i<=9;i++){
sum += i;
paths.add(i);
backtracking(k,n,i+1);
paths.remove(paths.size()-1);
sum -=i;
}
}
}
17. 电话号码的字母组合
题目
链接
代码
class Solution {
public List<String> letterCombinations(String digits) {
if(digits==null||digits.length()==0){
return new ArrayList();
}
backtracking(digits.toCharArray(),0);
return result;
}
char[][] map = new char[][]{
{},
{},
{'a','b','c'},
{'d','e','f'},
{'g','h','i'},
{'j','k','l'},
{'m','n','o'},
{'p','q','r','s'},
{'t','u','v'},
{'w','x','y','z'}
};
List<String> result = new ArrayList();
StringBuilder sb = new StringBuilder();
public void backtracking(char[] arr,int index){
if(index>=arr.length){
result.add(sb.toString());
return;
}
char[] mapArr = map[arr[index]-'0'];
for(int i=0;i<mapArr.length;i++){
sb.append(mapArr[i]);
backtracking(arr,index+1);
sb.deleteCharAt(sb.length()-1);
}
}
}