[leetcode]17. Letter Combinations of a Phone Number

激动人心啊,终于能以这种操作ac了
第一遍submit忘记处理空,第二遍就ac了

Runtime: 2 ms, faster than 91.37% of Java online submissions for Letter Combinations of a Phone Number.

Solution 1: Divide and Conquer

  • 要记住啊!分治法要分到最小的问题再开始合。这个题的最小规模问题就是处理一个数字。
    被注释掉的部分是因为我逻辑错了,怎么会想到分到两个就开始合呢

  • 一开始的divide和merge函数都是用的List< String > 作为返回值,后来发现list的取值和迭代非常的麻烦。遂换成string[]进行处理。最后将结果整个转化成List< String > 。这样更为方便吧。

class Solution {
    public List<String> letterCombinations(String digits) {
        
        
        Map<Character,String> hashmap=new HashMap<>();
        List<String> finallist=new ArrayList<String>();
        
        if(digits==null||digits.length()==0) return finallist;
            
        hashmap.put('2',"abc");
        hashmap.put('3',"def");
        hashmap.put('4',"ghi");
        hashmap.put('5',"jkl");
        hashmap.put('6',"mno");
        hashmap.put('7',"pqrs");
        hashmap.put('8',"tuv");
        hashmap.put('9',"wxyz");
        
        char[] dig=digits.toCharArray();   
        
        int left=0;
        int right=dig.length-1;
        
        String[] res=Divide(digits,hashmap,left,right); 
        
        for(int i=0;i<res.length;i++){
            finallist.add(res[i]);
        }
        
        return finallist;
    }
    
    private String[] Divide(String digits,Map<Character,String> hashmap,int left, int right){
        
        
        
//         if(left+1==right){
//             String str1=hashmap.get(digits.charAt(left));
//             String str2=hashmap.get(digits.charAt(right));
            
//             String[] list=new String[str1.length()*str2.length()];
//             int k=0;
            
//             for(int i=0;i<str1.length();i++){
//                 String ss="";
//                 for(int j=0;j<str2.length();j++){
//                     ss+=str1.charAt(i);
//                     ss+=str2.charAt(j);
//                     list[k]=ss;
//                     k++;
//                 }
//             }
            
//             return list;
            
//         }
        
        if(left==right){
            
             String str1=hashmap.get(digits.charAt(left));
             
             String[] list=new String[str1.length()];
             int k=0;
            
             for(int i=0;i<str1.length();i++){
                list[k]=str1.substring(i,i+1);
                k++;
            }
            
            return list;
        }
        
        int mid=(left+right)/2;
        String[] listLeft=Divide(digits,hashmap,left,mid);
        String[] listRight=Divide(digits,hashmap,mid+1,right);
        
        return mergeList(listLeft,listRight);
        
    }
    
    private String[] mergeList(String[] listLeft,String[] listRight){
        
        String[] reslist=new String[listLeft.length*listRight.length];
        int k=0;
        for(int i=0;i<listLeft.length;i++){
            for(int j=0;j<listRight.length;j++){
                
                String mergeString="";
                mergeString+=listLeft[i];
                mergeString+=listRight[j];
                reslist[k]=mergeString;
                k++;
                
                
                
                
            }
        }
        return reslist;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_36869329/article/details/84380683
今日推荐