赞
踩
题目链接 &&文章讲解
找出所有相加之和为 n 的 k 个数的组合,且满足下列条件:
class Solution { List<List<Integer>> result= new ArrayList<>(); List<Integer> path = new ArrayList<>(); public List<List<Integer>> combinationSum3(int k, int n) { backtracking(n,k,0, 1); return result; } //1.递归函数参数以及返回值 public void backtracking(int targetSum, int k, int sum, int startIndex){ //2.剪枝操作:sum > targetSum 确定终止条件:path.size == k if(sum > targetSum) return; if(path.size() == k){ if(targetSum == sum){ result.add(new ArrayList<>(path)); return; } } //3.单层处理逻辑 //剪枝操作:i < 9 - (k - path.size()) + 1 for(int i = startIndex; i <= 9 - (k - path.size()) + 1; i++){ sum += i; path.add(i); backtracking(targetSum, k, sum, i + 1); sum -= i; path.removeLast(); } } }
题目链接&&文章讲解
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
class Solution { //存储最终结果 List<String> list = new ArrayList<>(); //存储每次迭代字符串 StringBuilder str = new StringBuilder(); public List<String> letterCombinations(String digits) { if (digits == null || digits.length() == 0) { return list; } //数字-字母映射 String[] numString = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"}; backTracking(digits, numString, 0); return list; } //树形结构深度:digits.length() 树形结构宽度:letter.length public void backTracking(String digits, String[] numString, int index){ if(index == digits.length()){ list.add(str.toString()); return; } String letter = numString[digits.charAt(index) - '0']; for(int i = 0; i < letter.length(); i++){ str.append(letter.charAt(i)); backTracking(digits, numString, index + 1); str.deleteCharAt(str.length() - 1); } } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。