代码随想录算法训练营day25 || 216.组合总和III 、 17.电话号码的字母组合

216. 组合总和 III

采用回溯算法,在每次达到k时就记录并回溯。在做这题时,我没将count值放入递归中,导致每次递归count都归0。

class Solution {
    List> resut=new ArrayList<>();
    LinkedList aredd=new LinkedList<>();
    public List> combinationSum3(int k, int n) {
        mamd(k,n,0,1);
        return resut;
    }
    public void mamd(int k,int n,int count,int star)
    {
        
        if(aredd.size()==k&&count==n)
        {
            resut.add(new ArrayList<>(aredd));
            return;
        }
        for(int i=star;i<=9;i++)
        { 
            count+=i;
            aredd.add(i);
            mamd(k,n,count,i+1);
            count-=i;
            aredd.removeLast();
        }
    }
}
17. 电话号码的字母组合

该题有些难,对于index这一项我不是很理解。

class Solution {
    List list=new ArrayList();
    public List letterCombinations(String digits) {
        if(digits==null||digits.length()==0)
    {
        return list;
    }
     String[] numString = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
     backing(digits,numString,0);
     return list;
    }
    StringBuilder temp=new StringBuilder();
    public void backing(String digits,String[] numString,int index)//index代表有几个数字
    {
        if(index==digits.length())
        {
            list.add(temp.toString());
            return;
        }
        String str=numString[digits.charAt(index)-'0'];//numString内的第n个字符串
        for(int i=0;i

总结:今天的有点难,主要是电话号码的映射。

你可能感兴趣的:(算法,windows)