关于网站建设电话销售的话术,wordpress自适应小说,物流网站素材,网站开发实训新的体会17.电话号码的字母组合
在套模板的基础上#xff0c;手动按位置放一个映射表#xff0c;每次独立处理字符#xff0c;还要对空字符串单独处理#xff08;因为默认生成了StringBuilder是空字符串而不是null#xff09;
此处for循环并不像之前从start开始遍历#xff0c;…17.电话号码的字母组合
在套模板的基础上手动按位置放一个映射表每次独立处理字符还要对空字符串单独处理因为默认生成了StringBuilder是空字符串而不是null
此处for循环并不像之前从start开始遍历因为本题每一个数字代表的是不同集合也就是求不同集合之间的组合而求组合问题是求同一个集合中的组合
class Solution {ListString res new ArrayList();StringBuilder path new StringBuilder();String[] numString {, , abc, def, ghi, jkl, mno, pqrs, tuv, wxyz};public ListString letterCombinations(String digits) {if (digits.length() 0) return res;backtrack(digits,0);return res;}void backtrack(String digits, int start) {if (start digits.length()) {res.add(path.toString());return;}String str numString[digits.charAt(start) - 0];for (int i 0; i str.length(); i) {path.append(str.charAt(i));backtrack(digits,start1);path.deleteCharAt(path.length()-1);}}
}
39. 组合总和
这种复杂算法可以先把给的数组排序方便剪枝
class Solution {ListListInteger res new ArrayList();ListInteger path new ArrayList();int sum 0;public ListListInteger combinationSum(int[] candidates, int target) {Arrays.sort(candidates);backtrack(candidates, target, 0);return res;}void backtrack(int[] candidates, int target, int start) {if (sum target) {res.add(new ArrayList(path)); return;} for (int i start; i candidates.length; i) {if (sum candidates[i] target) break;path.add(candidates[i]);sum candidates[i];backtrack(candidates, target, i);path.removeLast();sum - candidates[i];}}
}
40.组合总和II
candidates有重复元素但还不能有重复的组合真的离谱加一个数组来标记
class Solution {ListListInteger res new ArrayList();ListInteger path new ArrayList();boolean[] used;int sum 0;public ListListInteger combinationSum(int[] candidates, int target) {used new boolean[candidates.length];Arrays.fill(used, false);Arrays.sort(candidates);backtrack(candidates, target, 0);return res;}void backtrack(int[] candidates, int target, int start) {if (sum target) res.add(new ArrayList(path)); for (int i start; i candidates.length; i) {if (sum candidates[i] target) break;if (i 0 candidates[i] candidates[i - 1] !used[i - 1]) continue;used[i] true;path.add(candidates[i]);sum candidates[i];backtrack(candidates, target, i1);used[i] false;path.removeLast();sum - candidates[i];}}
}