area1に3つの内容2,3,4があり、area2に3つの内容1,2,3があり、area3に2つの内容1,2があるとします。 mはキーがlocationidであり、値がcontentidのリストであるマップです。たとえば、area1にはマップ(1、{2,3,4})があります。各エリアは1つのコンテンツを選択し、すべての組み合わせを検索します。私はこの問題を解決するためにdfs(再帰)を使いますが、line1にはnullpointerexceptionがあります。中間体は文字列のリストであり、リストを反復し、その型は両方とも文字列です。なぜnullポインタ例外がありますか?これは、nullpointerexceptionの特定の条件であり、重複していません。深さの最初の検索を実行するときのヌルポイント検出
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);
}
スタックトレースを送信します。 – elhefe
私はスタックを使用しませんでした。再帰を使用します。 @elhefe – KKKK
https://en.wikipedia.org/wiki/Stack_trace – elhefe