您的位置:首页 > 其它

Letter Combinations of a Phone Number

2016-06-19 21:37 260 查看
//回溯,深度遍历每个每个按键,然后回溯,题库里的回溯题,都差不多是类似的解法:

public class Solution {
//dfs
public List<String> letterCombinations(String digits) {
List<String>res = new ArrayList<String>();
if(digits.length()==0)return res;
String[] str=new String[]{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
dfs(res,"",0,digits,str);
return res;
}

public void dfs(List<String>l,String sb,int index,String m,String[] str)
{
//1
if(index==m.length()&&sb.length()==m.length())//why?
{
l.add(sb);
return;
}
for(int i=index;i<m.length();i++)
{
int a=m.charAt(index)-'0';
for(int j=0;j<str[a].length();j++)
{
sb+=str[a].charAt(j);
dfs(l,sb,i+1,m,str);
sb=sb.substring(0,sb.length()-1);
}
}
}
//2
if(index==m.length())
        {
            l.add(sb);
            return;
        }
        int a=m.charAt(index)-'0';
        for(int j=0;j<str[a].length();j++)
        {
          sb+=str[a].charAt(j);
          dfs(l,sb,index+1,m,str);
          sb=sb.substring(0,sb.length()-1);
        }
//3
 if(index==m.length())
     {
        l.add(sb.toString());
        return;
     }
     int a=m.charAt(index)-'0';
     for(int j=0;j<str[a].length();j++)
     {
        sb=sb.append(str[a].charAt(j));
       dfs(l,sb,index+1,m,str);
       sb.setLength(sb.length() - 1);
     }
//4 BFS
 public List<String> letterCombinations(String digits) {
        LinkedList<String>res = new LinkedList<String>();
        if(digits.length()==0)return res;
        String[] str=new String[]{"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
        res.add("");
        if(digits.length()==0)return res;
        for(int i=0;i<digits.length();i++)
        {
            int a=Character.getNumericValue(digits.charAt(i));
            while(res.peek().length()==i)
            {
                String s=res.remove();
                for(char c:str[a].toCharArray())
                {
                    res.add(s+c);
                }
            }
        }
        return res;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: