-1

Suppose area1 has three contents 2,3,4, area2 has three contents 1,2,3 and area3 has two contents 1,2. m is the map that keys are locationid and values are list of contentid. For example, area1 has the map (1,{2,3,4}). Each area choose 1 content and find all the combination. I use dfs (recursion) to solve this problem but there is a nullpointerexception in line1. The intermediate is a list of string and i iterate through the list and their types are both string, why there is a null pointer exception? This is a specific condition in nullpointerexception and it is not duplicate.

public static List<String> dfs(String digits,Map<String, List<String>> m) {
        List<String> result = new ArrayList<String>();
        if(digits.length() == 0){
            return result;
        }
        if(digits.length() == 1){
            return m.get(digits.charAt(0));
        }
        List<String> intermediate = dfs(digits.substring(1, digits.length()),m);
        for(String first : m.get(Character.toString(digits.charAt(0)))){
            for(String rest : intermediate){           // line1
                result.add(first + rest);
                }
            }
        return result;
    }

public static void main(String[] args) {
    // TODO Auto-generated method stub
    String digits="123";
    Map<String,List<String>> selected=new HashMap<>();
    selected.put("1", new ArrayList<>(Arrays.asList("4","2","3")));
    selected.put("2", new ArrayList<>(Arrays.asList("1","2","3")));
    selected.put("3", new ArrayList<>(Arrays.asList("1","2")));
    dfs(digits,selected);
}
Dominique Fortin
  • 2,212
  • 15
  • 20
KKKK
  • 347
  • 7
  • 18

1 Answers1

2

I guess the problem is here:

return m.get(digits.charAt(0));

it should return null, since digits.charAt(0) is not a String

you need to use substring or Character.toString( here to extract the number

JohnnyAW
  • 2,866
  • 1
  • 16
  • 27