216.组合总和III
class Solution { LinkedList<Integer> path = new LinkedList<>(); List<List<Integer>> res = new ArrayList<>(); public List<List<Integer>> combinationSum3(int k, int n) { travelsal(k,n,0,1); return res; } private void travelsal(int k,int n,int sum,int startIndex)//travelsal是遍历的意思 { if(path.size()>k) return ; if(sum > n ) return ; if(path.size()==k&&sum==n){ res.add(new ArrayList<>(path)); return ; } for(int i = startIndex;i<=9;i++){ //当然你这里也可以写i< 9-(k - path.size())+1 path.add(i); sum += i; travelsal(k,n,sum,i+1); sum -= i; path.removeLast(); } } }
17.电话号码的字母组合
class Solution { private List<String> res = new ArrayList<>(); public List<String> letterCombinations(String digits) { if(digits==null||digits.length()==0){ return res; } String[] numString = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"}; backTracking(digits,0,numString); return res; } StringBuilder sb = new StringBuilder(); private void backTracking(String digits,int num,String[] numString){ if(num == digits.length()){ res.add(sb.toString()); return ; } String str = numString[digits.charAt(num)-'0']; for(int i = 0;i<str.length();i++){ sb.append(str.charAt(i));//注意字符串不是字符,要用charAt() backTracking(digits,num+1,numString); sb.deleteCharAt(sb.length()-1); } } }