leetcode 150道题 计划花两个月时候刷完,今天(第四十二天)完成了1道(84)150:
84.(17. 电话号码的字母组合)题目描述:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
第一版(看的解题,感觉这个不知道循环层数,然后去用递归模拟循环层数是个模板啊,但是我看玩了第二题还是没弄出来。。)
class Solution {
List<String> res=new ArrayList();
public List<String> letterCombinations(String digits) {
if(digits==null||digits.length()==0){
return res;
}
String[] strs=new String[digits.length()];
init(strs,digits);
letterCombinationsCore(strs,new StringBuffer(),0);
return res;
}
public void letterCombinationsCore(String[] strs,StringBuffer sb,int index){
if(index==strs.length){
res.add(sb.toString());
return ;
}
// 就下面这个感觉是个模板。。
for(int i=0;i<strs[index].length();i++){
sb.append(strs[index].charAt(i));
letterCombinationsCore(strs,sb,index+1);
sb.deleteCharAt(sb.length()-1);
}
}
public void init(String[] strs,String digits){
for(int i=0;i<digits.length();i++){
if(digits.charAt(i)=='2'){
strs[i]="abc";
}else if(digits.charAt(i)=='3'){
strs[i]="def";
}
else if(digits.charAt(i)=='4'){
strs[i]="ghi";
}
else if(digits.charAt(i)=='5'){
strs[i]="jkl";
}
else if(digits.charAt(i)=='6'){
strs[i]="mno";
}
else if(digits.charAt(i)=='7'){
strs[i]="pqrs";
}
else if(digits.charAt(i)=='8'){
strs[i]="tuv";
}else{
strs[i]="wxyz";
}
}
}
}
85.(77. 组合)题目描述:
给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。
你可以按 任何顺序 返回答案。
还没做出来。。写的不对。。。我这个一次只能换一个。。
第一版
class Solution {
List<List<Integer>> res=new ArrayList();
public List<List<Integer>> combine(int n, int k) {
if(n<k){
return res;
}
int[] nums=new int[n];
for(int i=1;i<=n;i++){
nums[i-1]=i;
}
selectKNum(nums,k,0);
return res;
}
public void selectKNum(int[] nums, int k,int start) {
if(nums.length-start<k){
return ;
}
List<Integer> list=new ArrayList();
int i=start;
for(;i<start+k;i++){
list.add(nums[i]);
}
res.add(list);
start=i;
// 代表这次换第几个
if(k>1){
for(int index=0;index<k;index++){
for(;i<nums.length;i++){
List<Integer> temp=new ArrayList();
for(int m=0;m<k;m++){
if(m!=k-1-index){
temp.add(list.get(m));
}
}
temp.add(nums[i]);
res.add(temp);
}
i=start;
}
}
selectKNum(nums,k,start);
}
}
回溯也好难。。。但是这块貌似面试挺多的还得好好看。。
加油,早日跳槽!!!