77. 组合
题目链接:力扣题目链接
思路:将这个数组看成一个二叉树(图“代码随想录”),递归即可。先确定返回值和参数,回溯一般不返回值,参数就是起始值front和n,k;退出条件就是列表长度等于k退出;遍历顺序就是 for(int i = front;i<=n;i++)。
剪枝操作:for(int i = front;i<=n-(k-list.size())+1;i++),减少无效递归次数
17.电话号码的字母组合
题目链接:力扣题目链接
思路:建一个列表映射键盘2-9的字母,之后迭代给的digits,迭代内在遍历每个数字对应的3-4个字母即可。
class Solution {
List<String> list = Arrays.asList("abc","def","ghi","jkl","mno","pqrs","tuv","wxyz");
StringBuilder str = new StringBuilder();
List<String> result = new ArrayList<>();
int length;
public List<String> letterCombinations(String digits) {
length = digits.length();
if (digits == null || digits.length() == 0) {
return result;
}
die(digits,0);
return result;
}
public void die(String digits,int num1){
if(num1>length){
return;
}else if(num1==length){
result.add(new String(str.toString()));
return;
}
String numStr = list.get(digits.charAt(num1) - '2');
for(int i=0;i<numStr.length();i++){
str.append(numStr.charAt(i));
die(digits,num1 + 1);
str.deleteCharAt(str.length() - 1) ;
}
}
时间:2h